Xcode8 beta 在 inputAccessoryView getter 中添加 self.view.layoutIfNeeded() 导致崩溃

Posted

技术标签:

【中文标题】Xcode8 beta 在 inputAccessoryView getter 中添加 self.view.layoutIfNeeded() 导致崩溃【英文标题】:Xcode8 beta adding self.view.layoutIfNeeded() in inputAccessoryView getter causing crash 【发布时间】: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 键盘更改通知时立即反弹。

【问题讨论】:

【参考方案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 之前的版本中被跳过)。

【讨论】:

以上是关于Xcode8 beta 在 inputAccessoryView getter 中添加 self.view.layoutIfNeeded() 导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章

swift 3(xCode8-beta6)上的可达性问题

xcode8 beta4 未生成 managedObjectContext

ios swift 3 xcode8 beta 圆角 imageView

Xcode 8 Beta 6 文本断断续续且失真

Xcode 8 Beta 6 不支持 iOS 10 Beta 7 sdk

Xcode 8 beta 6:AnyObject 替换为 Any:classForCoder 在哪里?