iOS开发如何适配暗黑模式(Dark Mode)

作者 : 开心源码 本文共1916个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共209人阅读

暗黑模式

原理

  1. 将同一个资源,创立出两种模式的样式。系统根据当前选择的样式,自动获取该样式的资源

  2. 每次系统升级样式时,应用会调用当前所有存在的元素调用对应的少量重新方法,进行重绘视图,可以在对应的方法做相应的改动

资源文件适配

  1. 创立一个Assets文件(或者在现有的Assets文件中)

  2. 新建一个图片资源文件(或者者颜色资源文件、或者者其余资源文件)

  3. 选中该资源文件, 打开 Xcode ->View ->Inspectors ->Show Attributes Inspectors (或者者Option+Command+4)视图,将Apperances 选项 改为Any,Dark

  4. 执行完第三步,资源文件将会有多个容器框,分别为 Any ApperanceDark Apperance. Any Apperance 应用于默认情况(Unspecified)与高亮情况(Light), Dark Apperance 应用于暗黑模式(Dark)

  5. 代码默认执行时,即可以正常通过名字使用了,系统会根据当前模式自动获取对应的资源文件

注意

  1. 同一工程内多个Assets文件在打包后,就会生成一个Assets.car 文件,所以要保证Assets内资源文件的名字不能相同

如何在代码里进行适配颜色(UIColor)

+ (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);- (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);

e.g.

[UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trait) {    if (trait.userInterfaceStyle == UIUserInterfaceStyleDark) {        return UIColorRGB(0x000000);    } else {        return UIColorRGB(0xFFFFFF);    } }];

系统调用升级方法,自己设置重绘视图

当客户更改外观时,系统会通知所有window与View需要升级样式,在此过程中iOS会触发以下方法, 完整的触发方法文档

UIView

traitCollectionDidChange(_:)layoutSubviews()draw(_:)updateConstraints()tintColorDidChange()

UIViewController

traitCollectionDidChange(_:)updateViewConstraints()viewWillLayoutSubviews()viewDidLayoutSubviews()

UIPresentationController

traitCollectionDidChange(_:)containerViewWillLayoutSubviews()containerViewDidLayoutSubviews()

如何不进行系统切换样式的适配

注意
苹果官方强烈建议适配 暗黑模式(Dark Mode)此功能也是为了开发者能慢慢将应用适配暗黑模式

所以想通过此功能不进行适配暗黑模式,估计将会被拒

全局关闭暗黑模式

  1. 在Info.plist 文件中,增加UIUserInterfaceStyle key 名字为 User Interface Style 值为String,

  2. UIUserInterfaceStyle key 的值设置为 Light

单个界面不遵循暗黑模式

  1. UIViewController与UIView 都新添加一个属性 overrideUserInterfaceStyle
  2. overrideUserInterfaceStyle 设置为对应的模式,则强制限制该元素与其子元素以设置的模式进行展现,不跟随系统模式改变进行改变
    1. 设置 ViewController 的该属性, 将会影响视图控制器的视图和子视图控制器采用该样式
    2. 设置 View 的该属性, 将会影响视图及其所有子视图采用该样式
    3. 设置 Window 的该属性, 将会影响窗口中的所有内容都采用样式,包括根视图控制器和在该窗口中显示内容的所有演示控制器(UIPresentationController)

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS开发如何适配暗黑模式(Dark Mode)

发表回复