0

我有一个UIView名为的子类myView,它应该在设备方向改变时重新配置自己。我正在使用中的viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)方法UIViewController来调用setUp()重新配置视图的方法。我遇到的问题是它在我第一次加载该特定视图控制器时工作,但如果我导航离开然后返回它,代码将不再工作。怎么了?代码如下:

@IBOutlet weak var myView: UIView!
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    self.myView.setUp()
}

如果我改用不推荐使用的方法didRotate(from fromInterfaceOrientation: UIInterfaceOrientation),则代码每次都能正常工作。

4

2 回答 2

0

因为self.myView.setUp()每次我怀疑视图由于参考错误而没有更新时都会被调用。

尝试使它变得强大,如果这是一个错误参考的情况,那么这应该可以解决它

@IBOutlet var myView: UIView!
于 2018-08-28T08:13:54.333 回答
0

所以,我仍然没有弄清楚为什么会发生最初的问题,但我确实找到了解决方法。通常可以仅根据方法计算方向UIScreen.main.boundsviewDidLayoutSubviews()但我有一个以屏幕刷新率触发的计时器,因此该方法被调用 60 次/秒,而且我myView.setUp()的方法对处理器来说太密集了那是可行的。所以,我给了我UIViewController一个orientation带有 setter 观察者的属性,该属性在viewDidLayoutSubviews(). setUp()如果方向发生变化,setter 观察者将调用该方法。我仍然很好奇为什么其他方法不起作用,但解决方法可以。

于 2018-08-28T08:21:54.997 回答