iOS 13 适配

作者: 天下林子 | 来源:发表于2019-06-27 15:49 被阅读0次

    前言

    苹果爸爸又出新品,想必各位大佬,都是紧跟其步伐,在此总结下目前iOS 13 遇到的奔溃,以及Dark Mode 等问题

    setValue:forKeyPath: 方法奔溃

    image.png

    这个是使用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 用户可以选择暗黑模式

    image.png

    看着是不错,就是有bug,当设置了Dark 样式,项目中有些界面会受到影响,看了下代码大多数是cell,弹框,键盘等,看了微信的App也有问题,原来iOS 13 是“来自天堂的魔鬼”😃😁哈哈哈~~

    image.png
    上面是项目中的一个设置界面,只有在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的

    image.png

    状态栏

    状态栏适配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 测试出现的问题只有这几个,后续还会详细测试,有时间再分享,如有问题,请大佬们赐教~😄😄

    相关文章

      网友评论

        本文标题:iOS 13 适配

        本文链接:https://www.haomeiwen.com/subject/ibercctx.html