【问题标题】:Why is viewWillTransition(to size:...) not working if I navigate away from and back to the View Controller?如果我离开和返回视图控制器,为什么 viewWillTransition(to size:...) 不起作用?
【发布时间】:2018-08-28 06:48:41
【问题描述】:

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

【问题讨论】:

  • 重新访问视图时检查viewWillTransition函数是否调用
  • 它在召唤。此外,每次都会调用 self.myView.setUp() 。我怀疑这个问题与错误的引用或其他东西有关,好像可见的 myView 不再是实际被调用的那个。我上面是一个非常简化的代码版本,但是我不知道还要包括什么,而且太多了,无法将所有内容都放在那里...

标签: ios swift uiview uiviewcontroller viewwilltransitiontosize


【解决方案1】:

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

试着让它变得强大,如果这是一个错误的参考,那么这应该解决它

@IBOutlet var myView: UIView!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      相关资源
      最近更新 更多