iOS13暗黑模式

1. 系统

默认开启了暗黑模式(已上线的不影响,是有了苹果大会说有了暗黑模式的下一次打包才会有)
1.1 如果你未适配好按钮模式,可以将其关闭掉(User Interface Style)
在info.plist 文件中加入相关配置即可

      <key>UIUserInterfaceStyle</key>
	  <string>Light</string>

1.2 如果只是想适配某几个页面为暗黑模式的话,可以在当前页面中重写

   - (UIUserInterfaceStyle)overrideUserInterfaceStyle{
        return UIUserInterfaceStyleDark;
    }
1.3 暗黑模式改变时会调用不同的方法,都有一个属性traitCollection和方法traitCollectionDidChange:
  UIView
  traitCollectionDidChange(_:)
  layoutSubviews()
  draw(_:)
  updateConstraints()
  tintColorDidChange()

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

  UIPresentationController
  traitCollectionDidChange(_:)
  containerViewWillLayoutSubviews()
  containerViewDidLayoutSubviews()

2. 颜色

 2.1 UIColor方法 在block方法里面做style判定即可
      + (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider;
      - (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *))dynamicProvider;
  注:同时系统也有一系列的自定义动态颜色 eg. labelColor secondaryLabelColor linkColor systembackgroundColor

2.2 UIColor +colorNamed:
  需要在资源文件夹 Assets.xcassets中添加相应的颜色配置文件
  点击+号按钮,选中 New Color Set,即可有一个颜色配置文件,在Appearances中选择属性Any, Dark 然后分别设置两种颜色即可

2.3 重写traitCollectionDidChange 方法监听
      - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
      {// eg. layer 对应的颜色适配需要使用监听才有效
        if (@available(iOS 13.0, *)) {
 		if ([self.traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection]) {
         	    // iOS13 暗黑模式
 		    label.layer.borderColor = UIColor.redColor.CGColor;
        	 } else {
 		    // iOS13 普通模式
 		     label.layer.borderColor = UIColor.yellowColor.CGColor;
 		 }
 	  } else {
 	    	label.layer.borderColor = UIColor.yellowColor.CGColor;
	  }
      }

3. 图片

3.1 UIImage +imageNamed: 同(2.2)

3.2 使用属性imageAsset去设置暗黑模式图片

3.3 重写traitCollectionDidChange 方法监听 同(2.3)

4. 其他

4.1 状态栏适配
重写UIViewController中的 -preferredStatusBarStyle: 方法
返回类型 UIStatusBarStyle
UIStatusBarStyleDefault 默认为黑色,暗黑下为白色
UIStatusBarStyleLightContent 一直为白色
UIStatusBarStyleDarkContent 一直为黑色
如果要做到默认为白色,暗黑下为黑色,可以在该方法做style判定。暗黑模式变化是会回调该方法的

4.2 modelPreset

5. 测试

5.1 整个app 普通模式下是否正常 暗黑模式下是否正常
5.2 某个页面 普通模式(上一个页面普通模式页面)切换暗黑是否正常 暗黑重新切换普通是否正常
5.3 某个页面 暗黑模式(上一个页面暗黑模式页面)切换普通是否正常 普通重新切换暗黑是否正常
注: xcode 底部有个按钮(Environment Overrides),在平时断点debug的后面,查看图层也是这一块的按钮

posted @ 2021-11-19 15:09  古龙•历山大亚  阅读(168)  评论(0编辑  收藏  举报