![](/img/trans.png)
[英]-[UIView adjustedContentInset]: unrecognized selector sent to instance in ios 11
[英]iOS 11 and up crashing with -[UIView setDrawsWithVibrantLightMode:]: unrecognized selector sent to instance
我注意到在 iOS 11 及更高版本上出现此消息的应用程序崩溃显着增加。 这似乎是UIKit
正在调用的内部 API,堆栈跟踪显示它在UITableViewCell
内部:
Application Specific Information:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setDrawsWithVibrantLightMode:]: unrecognized selector sent to instance 0x15defa6d0'
Last Exception Backtrace:
0 CoreFoundation 0x0000000181691d04 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x00000001808e0528 objc_exception_throw + 52
2 CoreFoundation 0x000000018169f1c8 -[NSObject(NSObject) doesNotRecognizeSelector:] + 136
3 UIKit 0x000000018ae8711c -[UIResponder doesNotRecognizeSelector:] + 292
4 CoreFoundation 0x00000001816976b0 ___forwarding___ + 1376
5 CoreFoundation 0x000000018157d01c _CF_forwarding_prep_0 + 88
6 UIKit 0x000000018b022d58 -[UITableViewCell _setSeparatorDrawsInVibrantLightMode:] + 216
7 UIKit 0x000000018abf5ef0 -[UITableViewCell setSeparatorColor:] + 340
8 UIKit 0x000000018abf451c __53-[UITableView _configureCellForDisplay:forIndexPath:]_block_invoke + 1228
9 UIKit 0x000000018aad6e34 +[UIView(Animation) performWithoutAnimation:] + 100
10 UIKit 0x000000018abf3f64 -[UITableView _configureCellForDisplay:forIndexPath:] + 268
11 UIKit 0x000000018ae03a00 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 844
12 UIKit 0x000000018ae03eac -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 76
13 UIKit 0x000000018ade39f0 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2136
14 UIKit 0x000000018ab99508 -[UITableView layoutSubviews] + 136
我一直无法重现这个问题,但它在许多用户设备上一直崩溃,并且设备或操作系统版本之间没有共同的线程,除了它只发生在 iOS 11 及更高版本上。
最终发现这是在辅助功能设置下启用了深色设置时UIKit
的错误:
Settings -> General -> Accessibility -> Increase Contrast -> Darken Colors
如果您遇到此崩溃,请尝试打开/关闭该设置以重现它。
现在我们通过简单地将此方法实现为扩展中的Void
函数来抑制这一点:
@available(iOS 11.0, *)
extension UITableViewCell {
func _setSeparatorDrawsInVibrantLightMode(_ value: Bool) {
}
}
所以UIKit
可以调用它,但它什么也不做(并且不会使应用程序崩溃)。
正如 jwswart 在他的回答中所说,应该添加下一个代码:
@available(iOS 11.0, *)
extension UITableViewCell {
@objc func _setSeparatorDrawsInVibrantLightMode(_ value: Bool) {
}
}
但有时您会收到相同的错误消息,但针对不同的问题。 要修复它,您还应该添加:
@available(iOS 11.0, *)
extension UITableView {
@objc func _setSeparatorsDrawInVibrantLightModeUIAppearance(_ value: Bool) {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.