zoukankan      html  css  js  c++  java
  • 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的后面,查看图层也是这一块的按钮

  • 相关阅读:
    jsp grid can not be used in this ('quirks') mode
    weblogic stage更改不马上生效
    shell执行class或jar
    java json字符串与对象转换
    js对象及元素复制拷贝
    js中json字符串与对象的转换及是否为空
    js window.open隐藏参数提交
    poi excel文件名或者内容中文乱码
    linux poi生成excel demo调试附调用代码
    PeekMessage与GetMessage的对比
  • 原文地址:https://www.cnblogs.com/gulong/p/15577399.html
Copyright © 2011-2022 走看看