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() 导致崩溃的主要内容,如果未能解决你的问题,请参考以下文章
xcode8 beta4 未生成 managedObjectContext
ios swift 3 xcode8 beta 圆角 imageView