前言
苹果爸爸又出新品,想必各位大佬,都是紧跟其步伐,在此总结下目前iOS 13 遇到的奔溃,以及Dark Mode 等问题
setValue:forKeyPath: 方法奔溃
这个是使用setValue:forKeyPath:方法直接设置textFiled的textColor,用测试手机测试了下,只有iOS13 是奔溃的,iOS13以下的不会有问题,我们使用attribute的方式,就可以解决此问题,代码如下:
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString:@""];
[attributedStr setAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:13], NSForegroundColorAttributeName:[UIColor colorFromHexString:@"#666666"]} range:NSMakeRange(0, 15)];
self.rightTextField.attributedText = attributedStr;
如果用swift,使用KVC也会奔溃,可以使用runtime来代理,可以看下大佬的这个文章
暗黑模式 - Dark mode
iOS13 用户可以选择暗黑模式
看着是不错,就是有bug,当设置了Dark 样式,项目中有些界面会受到影响,看了下代码大多数是cell,弹框,键盘等,看了微信的App也有问题,原来iOS 13 是“来自天堂的魔鬼”😃😁哈哈哈~~
上面是项目中的一个设置界面,只有在iOS13 且设置了暗黑模式,才有问题。
那么怎么修复呢?
在官方文档中链接1可以看到
当我们在一个普通的 controlle, view 上重写这个属性,只会影响当前的视图,不会影响前面的 controller 和后续 present 的 controller。
但是当我们在 window 上设置 overrideUserInterfaceStyle 的时候,就会影响 window 下所有的 controller, view,如果想监听是Light或者是Dark模式,可以通过下面方法:
//Called when the iOS interface environment changes.
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection;
so,如果想修改上面设置页面的出现的“黑色cell”,可以在Appdelegate中添加如下代码:
if (@available(iOS 13.0, *)) {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
#endif
} else {
// Fallback on earlier versions
}
如果不使用__IPHONE_OS_VERSION_MAX_ALLOWED的宏,则你的项目在Xcode11以下版本会报错,因为overrideUserInterfaceStyle在 iOS13 以下是没有这个api的
状态栏
状态栏适配iOS 13,代码如下:
if (@available(iOS 13.0, *)) {
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDarkContent];
#endif
} else {
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault];
}
目前对iOS 13 测试出现的问题只有这几个,后续还会详细测试,有时间再分享,如有问题,请大佬们赐教~😄😄