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

时间:2016-06-17 12:41:39

标签: layout inputaccessoryview swift3 xcode8 ios10

使用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()它将在模拟器上正常工作。我需要那条线,否则在调用inputAccessoryView键盘更改通知时,collectionView会暂时弹回。

1 个答案:

答案 0 :(得分:1)

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

  

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