如果我离开并返回到视图控制器,为什么 viewWillTransition(to size:...) 不起作用?
Why is viewWillTransition(to size:...) not working if I navigate away from and back to the View Controller?
我有一个名为 myView
的 UIView
子类,它应该在设备方向改变时重新配置。我在 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 times/second,而我的 myView.setUp()
方法对处理器的要求太高,无法使用。所以,我给了我的 UIViewController
一个 orientation
属性 和一个 setter 观察者,属性 在 viewDidLayoutSubviews()
内计算和设置。如果方向发生变化,setter 观察器会调用 setUp()
方法。我仍然很好奇为什么其他方法不起作用,但解决方法可以。
我有一个名为 myView
的 UIView
子类,它应该在设备方向改变时重新配置。我在 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 times/second,而我的 myView.setUp()
方法对处理器的要求太高,无法使用。所以,我给了我的 UIViewController
一个 orientation
属性 和一个 setter 观察者,属性 在 viewDidLayoutSubviews()
内计算和设置。如果方向发生变化,setter 观察器会调用 setUp()
方法。我仍然很好奇为什么其他方法不起作用,但解决方法可以。