为什么 viewWillTransition(to size:..) 如果我离开并返回视图控制器,则不起作用?



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

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

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

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

尝试使其强大,如果这是一个错误的引用,那么这应该可以修复它

@IBOutlet var myView: UIView!

所以,我仍然没有弄清楚为什么会发生原始问题,但我确实想出了一个解决方法。通常,可以根据viewDidLayoutSubviews()方法中的UIScreen.main.bounds计算方向,但是我有一个以屏幕刷新率触发的计时器,因此该方法被调用60次/秒,并且我的myView.setUp()方法过于处理器密集型,无法正常工作。因此,我为我的UIViewController提供了一个带有二传手观察器的orientation属性,该属性在viewDidLayoutSubviews()内计算和设置。然后,如果方向发生更改,二传手观察者将调用setUp()方法。我仍然很好奇为什么另一种方法不起作用,但解决方法可以。

相关内容

  • 没有找到相关文章

最新更新