1

使用 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键盘更改通知时立即反弹。

4

1 回答 1

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 之前的版本中被跳过)。

于 2016-09-18T19:16:33.100 回答