首页 > 其他分享 >iOS 深色模式适配

iOS 深色模式适配

时间:2023-03-28 17:56:13浏览次数:52  
标签:深色 颜色 自定义 适配 iOS UIColor Colors

要求:iOS13.0以上

重点:需要所有界面进行适配,工作量巨大,需要从项目开始就进行适配;H5界面无法进行适配

 

实现方式:System Colors(常用)、Semantic Colors(常用)、Dynamic Colors(常用)、Asset Catalog、Border colors、Dynamic Images

 

1.System Colors:

Apple为了适配深色模式对UIKit中的UIColor进行了重新定义,具体颜色代码值可查看apple官方文档,例如将.red, .blue和 .yellow定义为.systemRed,.systemBlue和.systemYellow,这些新定义的System Colors在深色和浅色模式下表现为不同的颜色。

 

2.Semantic Colors:

对于一些需要进行文字显示的控件apple也做了深色模式的适配,Apple新加了Semantic Colors颜色方案,使用Semantic Colors时不需要纠结具体的值,只需要在合适的场景使用,例如当控件是Label时,在没有自定义字体颜色时,可以使用.label类型的的Semantic Colors,在浅色模式下显示黑色字体,在深色模式下显示白色字体;Semantic Colors包括.label,.separator,.link, .systemBackground和.systemFill

 

3.Dynamic Colors(自定义颜色):

在实际开发中很多情况下我们都是需要自定义颜色的,Apple也给出了相应的方案,那就是通过UIColor.init(dynamicProvider: @escaping (UITraitCollection) -> UIColor)这个方法进行创建自定义的semantic color。

 

为系统类UIColor写一个扩展

public extension UIColor {

    static func | (lightMode: UIColor, darkMode: UIColor) -> UIColor {

        guard #available(iOS 13.0, *) else { return lightMode }

        return UIColor { (traitCollection) -> UIColor in

            return traitCollection.userInterfaceStyle == .light ? lightMode : darkMode

        }

    }

}

 

 

4.Asset Catalog:

在asset里面预先保存自定义颜色,在Any Appearence(浅色模式)和Dark Appearence(深色模式)分别添加一种颜色即可。一般用于高度重复的颜色,比如主题色等,需要UI高度统一颜色标准。

支持代码使用:view.backdroundcolor = Color(named: “自定义颜色名”)

 

5.Border colors:

Border colors在当主题模式发生改变时并不会自动的进行适配,所以需要手动的进行处理,可以通过traitCollectionDidChange(_:)这个方法在进行处理:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {

    super.traitCollectionDidChange(previousTraitCollection)

    traitCollection.hasDifferentColorAppearance(comparedTo: traitCollection) {

        layer.backgroundColor = UIColor.layer.cgColor

    }

}

 

6.Dynamic Images:

图片资源同样支持深色模式,需要使用Assets.xcassets,新建一个Assets.xcassets并在Attributes inspector点击Appearances选择Any, Dark,然后分别为Any Appearances和Dark Appearances配置响应的图片。

后台返回图片时需要自己用代码创建Assets。

尽量不要使用图片,无限的增加图片资源最终会导致包的大小会增加很多。

可以tintColor或者反转图片颜色解决改变图片颜色问题

 

标签:深色,颜色,自定义,适配,iOS,UIColor,Colors
From: https://www.cnblogs.com/laorenyuhail/p/17266138.html

相关文章

  • Region-区域适配器RegionAdapter
    Prism内置了几个区域适配器ContentControlRegionAdapterItemsControlRegionAdapterSelectorRegionAdapterComboBoxListBoxRibbonTabControl所以我们可以......
  • Airtest新增iOS、Windows录屏功能,真香!
    1.前言在录屏这块,Airtest之前一直仅支持了Android设备,但Airtest1.2.9的新版录屏功能里,新增了iOS和Windows的录屏支持。下文我们将详细了解这个新的录屏功能,以及实操下在......
  • iOS自动打包 Swift Package 报错记录
      使用脚本自动打包iOSipa时,如果三方库有更新,swiftpakege加载库时报错,多半是git账号信息问题,钥匙串访问问题,尤其是有私有库存在时报错信息:1.errSecInternalComponen......
  • 直播平台源代码,iOS中使用 Date/NSDate 来获取时间
    直播平台源代码,iOS中使用Date/NSDate来获取时间将Date转为字符串类型extensionDate{  ///将Date转化为固定格式的字符串  ///-parameterformatter:时间......
  • iostat命令详解
    iostat命令详解iostat用于输出CPU和磁盘输入输出、分区、网络文件系统NFS相关的统计信息。iostat命令用于监控系统设备的输入/输出情况,并生成报告,以便根据统计报告修改系统......
  • Nagios
    服务端安装:tarxzvfnagios-3.3.1.tar.gzcdnagios/usr/sbin/useraddnagios-s/sbin/nologins/usr/sbin/groupaddnagcmd/usr/sbin/usermod-Gnagcmdnagios/usr/sb......
  • vue全家桶进阶之路8:Axios的安装与HTTP请求实战
    Axios是一个基于Promise的HTTP客户端,用于在浏览器和Node.js中发送HTTP请求。它可以使用在Vue中发送请求以及与后端API进行交互。在Vue中使用Axios可以通过以下步骤:安装A......
  • 吃巧克力,容器vector、map,容器适配器 priority_queue,算法sort排序
     #include<algorithm>#include<queue>#include<map>#include<vector>#include<iostream>usingnamespacestd;structchocolate{longlonga;//价......
  • iOS7应用开发3、Objective-C
     【跟随教授的讲解和演示,并重做了课上的demo之后,惊奇地发现自己写的程序有bug,界面上12张卡牌出现后,点击任何一个,其他所有卡牌都会变成一块白板……在经历了长时间的调试......
  • iOS7应用开发5、视图控制器View Controller及其生命周期
    1、UITextView:该类与Label类类似,可显示多行,可以编辑内容,可以滚动查看内容;包含属性NSTextStorage*textStorage,该类是NSMutableAttributedString的基类;修改该属性可以自动更......