如果我离开视图控制器并返回视图控制器,为什么viewWillTransition(to size:...)无法正常工作?

时间:2018-08-28 06:48:41

标签: ios swift uiview uiviewcontroller viewwilltransitiontosize

我有一个名为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() } ,则每次代码都可以正常工作。

2 个答案:

答案 0 :(得分:0)

由于每次我怀疑由于引用错误而导致视图未更新时,都会调用self.myView.setUp()

请尝试使其更牢固,如果引用不正确,则应该对其进行修复

@IBOutlet var myView: UIView!

答案 1 :(得分:0)

因此,我仍然没有弄清楚为什么原来的问题会发生,但是我确实找到了解决方法。通常可以在UIScreen.main.bounds方法中基于viewDidLayoutSubviews()计算方向,但是我有一个以屏幕刷新率触发的计时器,因此该方法被称为60次/秒,而我的myView.setUp()方法过于占用处理器资源,因此无法使用。因此,我给了UIViewController一个orientation属性,并带有一个setter观察者,该属性是在viewDidLayoutSubviews()内计算和设置的。然后,如果方向发生变化,则设置查看器将调用setUp()方法。我仍然很好奇为什么其他方法不起作用,但是解决方法会起作用。