IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS 13.0 暗黑模式的适配 -> 正文阅读

[移动开发]iOS 13.0 暗黑模式的适配

一、暗黑模式的原理

  • 将原本的资源文件,创建出两种不同的模式。根据不同的模式,自动获取该样式的资源。
  • 每次切换系统模式的时候,系统会重新调用一些方法,重新赋值。

二、暗黑模式适配主要考虑的是:

  • 1、 图片适配

  • 2、颜色适配(文字颜色,背景颜色)

  • 3、状态栏适配

  • 4、关闭暗?模式(或者关闭某?个页?的暗?模式)

  • 5、模式切换代理

三、如果不需要适配暗黑模式的话去info里面关闭即可。

在这里插入图片描述

四、iOS13之前 UIColor 只能代表?种颜?,但是在iOS13之后,系统提供了?些 UIColor 的颜?是动态的,可以在 Light Mode 和 Dark Mode 下显?不同的颜色。在这?不多讲,因为真是开发中,?字颜?或者背景颜?都是UI设计好的,不太可能会?到系统的。

系统提供的动态颜色有: labelColor、systemBackgroundColor、secondarySystemBackgroundColor、tertiarySystemBackgroundColor、systemGroupedBackgroundColor、secondarySystemGroupedBackgroundColor、tertiarySystemGroupedBackgroundColor等。

五、颜色适配

1、iOS13苹果提供了两个专?的?法:

+ (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
- (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
  • 一个是类方法,一个是对象方法。
  • 这两个方法需要传入一个 block,当系统切换模式的时候,会触发回调。
  • 这个 block 会返回一个 UITraitCollection 类型的对象,通过其属性 userInterfaceStyle,可以得到当前是 LightMode 还是 DarkMode。就可以在不同的模式下设置想要的颜色。
  • 具体用法:创建一个 UIColor 的分类,调用 colorWithDynamicProvider:方法,判断 UITraitCollection 对象的 userInterfaceStyle 属性,根据响应的模式配置颜色。
#import "UIColor+DarkAndLightColor.h"
@implementation UIColor (DarkAndLightColor)
+ (UIColor *)colorWithLight:(UIColor *)lightColor dark:(UIColor *)darkColor {
    if (@available( iOS 13.0, *)) {
        return [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
            if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
                return darkColor;
            } else {
                return lightColor;
            }
        }];
    } else {
        return lightColor;
    }
}
@end

2、可以在 Assets.xcassets 文件中使用使用 ColorSet 直接动态设置不同模式下的颜色。

  • 打开Assets.xcassets
  • 新建一个Color set 选择右边栏的Appearances中对应的选项适配深色模式。

在这里插入图片描述

  • 使用方法: self.view.backgroundColor = [UIColor colorNamed:@“testColor”];
  • 当模式发生变化时,UIColor会动态的获取对应模式下的颜色。

六 图片适配 (使用ImageSet)

  • 打开Assets.xcassets
  • 新建一个Image set 选择右边栏的Appearances中对应的选项适配深色模式。

在这里插入图片描述

  • 使用方法:[UIImage imageNamed:@“sousuo”];
  • 当模式变化时,UIImage会动态的获取对应模式下的图片资源。

七、单个界面不遵循暗黑模式

  • UIViewController与UIView 都新增一个属性 overrideUserInterfaceStyle。
  • 将 overrideUserInterfaceStyle 设置为对应的模式,则强制限制该元素与其子元素以设置的模式进行展示,不跟随系统模式改变进行改变。
  • 设置 ViewController 的该属性, 将会影响视图控制器的视图和子视图控制器采用该样式。
  • 设置 View 的该属性, 将会影响视图及其所有子视图采用该样式。
  • 设置 Window 的该属性, 将会影响窗口中的所有内容都采用样式,包括根视图控制器和在该窗口中显示内容的所有演示控制器(UIPresentationController)。
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"SecondViewController";
    
    self.view.backgroundColor = [UIColor systemBackgroundColor];
    //设置当前控制器不遵循暗黑模式
    if (@available( iOS 13.0, *)) {
        self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
    } else {
        NSLog(@"版本低于 iOS 13.0 ");
    }
}
//需要监听系统暗黑模式切换的,看如下代理
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    if (@available(iOS 13.0, *)) {
        if (UITraitCollection.currentTraitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
            NSLog(@"当前界面处于暗黑模式");
        } else {
            NSLog(@"当前模式处于Light模式");
        }
    }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:57:45  更:2022-07-03 10:57:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 3:28:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码