iOS 13.0 暗黑模式的适配

本文详细介绍了iOS应用如何适配暗黑模式,包括颜色、图片的动态适配,以及如何关闭特定界面的暗黑模式。通过使用UIColor的动态提供方法和Asset Catalogs配置不同模式下的资源,实现无缝切换。同时,文章提到了UIViewController和UIView的overrideUserInterfaceStyle属性,用于单个界面不遵循系统暗黑模式。
摘要由CSDN通过智能技术生成

一、暗黑模式的原理

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

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

  • 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模式");
        }
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小程序可以通过以下方式实现iOS的输入法自适配: 1. 输入框的布局和样式适配:确保输入框在iOS系统中正常显示,并且在弹出输入法时不会被覆盖。可以通过设置输入框的位置、大小、边距等样式属性来达到适配的效果。 2. 输入法事件的适配:针对iOS系统的输入法事件特性进行适配,确保在iOS系统中触发正常。比如,在iOS系统中,输入法的“完成”按钮可能是通过触摸屏幕上的“完成”按钮或者按下键盘上的“Return”键来触发,需要针对这些不同的触发方式进行处理。 3. 自定义输入组件的适配:如果小程序中使用了自定义的输入组件,需要对iOS系统的输入法进行适配,确保输入法能够正常弹出并进行编辑。可以通过监听输入框的focus、blur等事件,并且针对不同的事件进行处理来实现适配。 4. 特殊输入方式的适配:如果小程序中使用了一些特殊的输入方式,如手写输入、语音输入等,需要对iOS系统的输入法进行适配,确保这些输入方式在iOS系统中能够正常使用。可以通过对这些输入方式的特性进行了解,并在小程序中进行相应的处理来实现适配。 总之,要实现iOS的输入法自适配,需要在开发小程序时充分考虑iOS系统的输入法特性,并进行相应的适配处理。同时,需要进行充分的测试,确保小程序在iOS系统中的输入体验良好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值