我有一个名为UIView
的{{1}}子类,应该在设备方向更改时重新配置自身。我正在使用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()
}
,则每次代码都可以正常工作。
答案 0 :(得分:0)
由于每次我怀疑由于引用错误而导致视图未更新时,都会调用self.myView.setUp()
。
请尝试使其更牢固,如果引用不正确,则应该对其进行修复
@IBOutlet var myView: UIView!
答案 1 :(得分:0)
因此,我仍然没有弄清楚为什么原来的问题会发生,但是我确实找到了解决方法。通常可以在UIScreen.main.bounds
方法中基于viewDidLayoutSubviews()
计算方向,但是我有一个以屏幕刷新率触发的计时器,因此该方法被称为60次/秒,而我的myView.setUp()
方法过于占用处理器资源,因此无法使用。因此,我给了UIViewController
一个orientation
属性,并带有一个setter观察者,该属性是在viewDidLayoutSubviews()
内计算和设置的。然后,如果方向发生变化,则设置查看器将调用setUp()
方法。我仍然很好奇为什么其他方法不起作用,但是解决方法会起作用。