黑暗iOS13适配深色模式(模式)的实现

  

好像大概也许是一年前,Mac OS系统发布了深色模式外观,看着挺刺激,时至今日用着也还挺爽的
  

  

终于,随着iPhone11等新手机的发售,iOS 13系统也正式发布了,伴随着手机版的深色模式也出现在了大众视野
  

  

我们这些iOS程序猿也有事情做了,原有项目适配iOS13系统,适配深色模式深色模式
  

  

虽然现在并没有要求强制适配深色模式,但黑暗是适配却也迫在眉睫
  

  
  

软件>//获取当前模式   让运=UITraitCollection.current.userInterfaceStyle   如果(运放==.dark) {   打印(“深色模式”)   }else if(运放==较轻){   打印(“浅色模式”)   其他}{   打印(“未知模式”)   }         开放var userInterfaceStyle: UIUserInterfaceStyle{得到}//所有模式   公共enum UIUserInterfaceStyle: Int {//未指明的   情况不明//浅色模式   情况下光//深色模式   黑暗情况下   }      

OC语言         如果(@available (iOS 13.0 *)) {   UIUserInterfaceStyle模式=UITraitCollection.currentTraitCollection.userInterfaceStyle;   如果(模式==UIUserInterfaceStyleDark) {   NSLog(@“深色模式”);   }else if(模式==UIUserInterfaceStyleLight) {   NSLog(@“浅色模式”);   其他}{   NSLog(@“未知模式”);   }   }//各种枚举值   typedef NS_ENUM (NSInteger UIUserInterfaceStyle) {   UIUserInterfaceStyleUnspecified,   UIUserInterfaceStyleLight,   UIUserInterfaceStyleDark,   }API_AVAILABLE (tvo (10.0)) API_AVAILABLE (ios (12.0)) API_UNAVAILABLE (watchos);      之前      


  

  

在iOS13系统中,ui遵循了两个协议:<代码> UITraitEnvironment 和<代码> UIContentContainer 协议

  

在<代码> UITraitEnvironment 协议中,为我们提供了一个监听当前模式变化的方法

        @protocol UITraitEnvironment & lt; NSObject>//当前模式   @ property(原子只读)UITraitCollection * traitCollection API_AVAILABLE (ios (8.0));//重写该方法监听模式的改变   - (void) traitCollectionDidChange:(可空UITraitCollection *) previousTraitCollection API_AVAILABLE (ios (8.0));   @end   之前            公共协议UITraitEnvironment: NSObjectProtocol {//当前模式   @available (iOS 8.0, *)   var traitCollection: UITraitCollection{得到}//重写该方法监听模式的改变   @available (iOS 8.0, *)   func traitCollectionDidChange (_ previousTraitCollection: UITraitCollection& # 63;)   }//使用方法   覆盖func traitCollectionDidChange (_ previousTraitCollection: UITraitCollection& # 63;) {   super.traitCollectionDidChange (previousTraitCollection)//每次模式改变的时候,这里都会执行   打印(“模式改变了”)   }      


  

  
      <李>不同模式的适配主要涉及颜色和图片两个方面的适配
      李   <李>其中颜色适配,包括相关背景色和字体颜色
      李   <李>当系统模式切换的时候,我们不需要如何操作,系统会自动渲染页面,只需要做好不同模式的颜色和图片即可
      李   
  


  

  

iOS13之前用户界面颜色只能表示一种颜色,从iOS13开始用户界面颜色是一个动态的颜色,在不同模式下可以分别代表不同的颜色
  

  

下面是iOS13系统提供的动态颜色种类,使用以下颜色值,在模式切换时,则不需要做特殊处理
  

        @ interface用户界面颜色(UIColorSystemColors)   # pragma马克系统颜色      @ property(类、原子只读的)用户界面颜色* systemRedColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemGreenColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemBlueColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemOrangeColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemYellowColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemPinkColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemPurpleColor API_AVAILABLE (tvo ios (9.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemTealColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemIndigoColor API_AVAILABLE (tvo ios (13.0), (13.0)) API_UNAVAILABLE (watchos);//灰色种类,在光模式下,systemGray6Color更趋向于白色   @ property(类、原子只读的)用户界面颜色* systemGrayColor API_AVAILABLE (tvo ios (7.0), (9.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* systemGray2Color API_AVAILABLE (ios (13.0)) API_UNAVAILABLE (tvo watchos);   @ property(类、原子只读的)用户界面颜色* systemGray3Color API_AVAILABLE (ios (13.0)) API_UNAVAILABLE (tvo watchos);   @ property(类、原子只读的)用户界面颜色* systemGray4Color API_AVAILABLE (ios (13.0)) API_UNAVAILABLE (tvo watchos);   @ property(类、原子只读的)用户界面颜色* systemGray5Color API_AVAILABLE (ios (13.0)) API_UNAVAILABLE (tvo watchos);   @ property(类、原子只读的)用户界面颜色* systemGray6Color API_AVAILABLE (ios (13.0)) API_UNAVAILABLE (tvo watchos);      # pragma马克前景颜色   @ property(类、原子只读的)用户界面颜色* labelColor API_AVAILABLE (tvo ios (13.0), (13.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* secondaryLabelColor API_AVAILABLE (tvo ios (13.0), (13.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* tertiaryLabelColor API_AVAILABLE (tvo ios (13.0), (13.0)) API_UNAVAILABLE (watchos);   @ property(类、原子只读的)用户界面颜色* quaternaryLabelColor API_AVAILABLE (tvo ios (13.0), (13.0)) API_UNAVAILABLE (watchos);//系统链接的前景色   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

黑暗iOS13适配深色模式(模式)的实现