暗黑模式适配

作者: 下线的时候 | 来源:发表于2020-07-08 17:57 被阅读0次

    参考文章地址:https://www.jianshu.com/p/0da3b107f06c

    一、适配暗黑模式

    1、颜色适配

    iOS13以后,颜色都可以设置成动态颜色,系统也有很多动态颜色,不过我们项目中一般都是UI给出的16进制颜色,我们一般是通过UIColor分类(或者新建一个获取颜色的类)来获取动态颜色,代码类似这样:

    //MARK: -根据情况返回不同的颜色  每个动态颜色都调用这个方法获取
    + (UIColor *)generateDynamicColor:(UIColor *)lightColor darkColor:(UIColor *)darkColor {
        if (@available(iOS 13.0, *)) {
            UIColor *dyColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
                if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) {
                    return lightColor;
                }else {
                    return darkColor;
                }
            }];
            return dyColor;
        } else {
            return lightColor;
        }
    }
    

    注意点:此时颜色基本已经解决,但是如果是CGColor则不同,Color我们设置过后,系统切换到暗黑模式后,会自动变为darkColor,但是CGColor仍然是单一颜色,我们需要在检测到系统模式变化时重新设置一遍(检测模式变化下面讲)

    2、图片适配

    图片适配参考上面链接

    二、获取当前模式

    参考上面链接

    三、检测模式变化

    可以在UIView、UIViewController以及其子类里面实现协议方法监测模式变化

    //MARK: -检测模式变化
    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        ///增加处理代码
    }
    

    四、项目内设置模式开关(仿微信暗黑模式设置页面)

    注意增加版本判断

    1、不随系统变化,整个项目暗黑

    self.view.window.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
    

    2、不随系统变化,整个项目亮色

    self.view.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
    

    3、跟随系统变化

    self.view.window.overrideUserInterfaceStyle = UIUserInterfaceStyleUnspecified;
    

    注意:如果自己手动设置,不随着系统变化,需要在设置时保存这个状态到本地,在启动时, 根据缓存的状态重新设置window的overrideUserInterfaceStyle

    相关文章

      网友评论

        本文标题:暗黑模式适配

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