【问题标题】:Xcode8 beta adding self.view.layoutIfNeeded() in inputAccessoryView getter causing crashXcode8 beta 在 inputAccessoryView getter 中添加 self.view.layoutIfNeeded() 导致崩溃
【发布时间】:2016-06-17 12:41:38
【问题描述】:

使用 Xcode8 Beta 时,我的模拟器在使用 inputAccessoryView 并在 inputAccessoryView 覆盖的 getter 中添加行 self.view.layoutIfNeeded() 时崩溃。它在我的设备上运行良好,但这一行会导致模拟器每次都崩溃

override var inputAccessoryView: UIView? {
    get {
        self.view.layoutIfNeeded()
        return customToolbar
    }
}

控制台中显示以下消息:

libc++abi.dylib: terminating with uncaught exception of type NSException

如果我只是删除这一行:self.view.layoutIfNeeded(),它将在模拟器上正常工作。我需要这条线,否则 collectionView 会在调用 inputAccessoryView 键盘更改通知时立即反弹。

【问题讨论】:

    标签: layout inputaccessoryview swift3 xcode8 ios10


    【解决方案1】:

    您可能陷入了新的布局循环。在此处查看 iOS 10 API 的更改https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-10.0/

    具有自定义 UIView 子类的第三方应用程序使用 Auto Layout 在调用 super 之前覆盖 layoutSubviews 和 self 上的脏布局,当它们在 iOS 10 上重建时有触发布局反馈循环的风险。当它们正确发送后续 layoutSubviews 调用时,它们必须一定要在某个时候停止在 self 上弄脏布局(请注意,此调用在 iOS 10 之前的版本中被跳过)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多