美文网首页
2020-07-18 iOS适配黑暗模式

2020-07-18 iOS适配黑暗模式

作者: 我是小胡胡123 | 来源:发表于2020-07-18 03:39 被阅读0次

一、darkMode适配场景

1、业务类型分: 图片,文本, 颜色

2、代码层面划分为: 视图,控制器,字符串

1,UIView,CALayer
2,UIWindow
3,UIViewController
4,NSString/NSAttributeString

二、功能

1, 开关

开关如何开启/关闭

1、属性设置

UIView/UIViewController 都有overrideUserInterfaceStyle属性

UIUserInterfaceStyleLight //普通模式
UIUserInterfaceStyleDark //深色模式
UIUserInterfaceStyleUnspecified //当前系统的模式

// 开启/关闭

self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;//控制器,present和push 新的控制器不受影响,上面的所有视图有效,包括childViewController

self.view.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;//视图,覆盖所有子视图配置

self.view.window.userInteractionEnabled = UIUserInterfaceStyleLight;// 所有界面有效,覆盖所有界面。view/viewController

2、重写getter方法

// 开启/关闭 重写方法

- (UIUserInterfaceStyle)overrideUserInterfaceStyle {
 return UIUserInterfaceStyleLight;
}

2, 开关的作用控制范围

1,window 〉 所有界面
2,控制器 〉 所有view,
3,控制器 〉 push的控制器,tabbarController的各子控制器,普通viewController添加的子控制器 ?
不能控制present弹出的控制器 ?
4,view 〉 所有子view

3, 开关overrideUserInterfaceStyle属性修改后,如何通知界面刷新

三、实现

1、通用--UIView/UIViewController

系统的模式切换后,或者界面被渲染时候,
在回调方法中,可以拿到当前模式

针对深色/正常模式, 手动重新设置界面样式,适配展现需求

// 回调-
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
 [super traitCollectionDidChange:previousTraitCollection];

 if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {

     if (UIUserInterfaceStyleDark == self.traitCollection.userInterfaceStyle) {

     }
 }
}

2、图片

UIImage -》支持配置两套图片, 模式修改后, 系统会自动get图片,修改界面
可以理解为UIImageView对image属性添加了观察者, 针对当前模式,自动提取对应的图片,渲染UIImageView视图

xcassets 支持添加两套图片
代码层面,可以注册的方式实现添加两套图片

UIImage *image = [UIImage new];
if (@available(iOS 13.0, *)) {
 [image.imageAsset registerImage:[UIImage imageNamed:@"light"] withTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]];
 [image.imageAsset registerImage:[UIImage imageNamed:@"dark"] withTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]];
} else {
 image = [UIImage imageNamed:@"light"];
}

3、颜色

UIColor -》 支持配置两套颜色

xcassets 支持添加两套颜色
代码层面,可以注册的方式实现两套颜色

UIColor *color = [UIColor new];
if (@available(iOS 13.0, *)) {
 color = [UIColor colorWithDynamicProvider:^UIColor *_Nonnull (UITraitCollection *_Nonnull traitCollection) {
     if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
         return [UIColor darkGrayColor];//dark
     }
     return [UIColor lightGrayColor];//light
 }];
} else {
 color = [UIColor lightGrayColor];
}]

4、文字--〉UILabel等,

在traitCollectionDidChange方法中,重新配置界面

相关文章

  • 2020-07-18 iOS适配黑暗模式

    一、darkMode适配场景 1、业务类型分: 图片,文本, 颜色 2、代码层面划分为: 视图,控制器,字符串 1...

  • 暗黑模式开发

    iOS13暗黑模式适配(项目开发版) iOS 13 DarkMode 暗黑模式 IOS 暗黑模式适配---基础适配

  • iOS 适配黑暗模式

    适配黑暗模式 一直在UIViewController或者UIView中做实验traitCollectionDidC...

  • iOS 黑暗模式适配

    苹果在iOS13中为iPhone引入了深色模式,所有 UIKit 本身所提供的 UI 控件(例如 UIView,U...

  • iOS 13 黑暗模式适配

    iOS 13 黑暗模式适配 官方文档 一、启用黑暗模式 1.1 强行不使用 不推荐,明年可能就要不过审核,临时用用...

  • iOS 13 黑暗模式适配

    1. 颜色适配 2.图片适配 又新增一个UITraitCollection方法,我们可以通过它来判断当前系统的模式...

  • iOS 黑暗模式的适配

    黑暗模式的适配其实很简单, 下面就讲一种最简单的场景, 无需增加代码。首先创建颜色和图片。 这里的颜色和图片有两种...

  • iOS13-适配夜间模式/深色外观(Dark Mode)

    iOS13-适配夜间模式/深色外观(Dark Mode) iOS13-适配夜间模式/深色外观(Dark Mode)

  • iOS 暗黑模式适配(项目实战篇)

    通过上面两篇文章iOS 暗黑模式适配(方法介绍篇)iOS 暗黑模式适配(叨叨篇)我们知道了暗黑模式怎么去适配,那么...

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

网友评论

      本文标题:2020-07-18 iOS适配黑暗模式

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