Dark Mode
一 、原理
状态
UITraitCollection
改变从屏幕到 view 的传递过程,目前支持手动触发和自动触发。如果设置了 view 的 dynamic color 和 dynamic image, 则 view 的 color 和 image 都会跟着改变。
当前情景改变会调用
UITraitEnvironment(iOS 8)
协议的方法,对于需要单独适配的 View,ViewController 需要在此方法进行一些特殊处理,UIView,UIViewController 均遵守该协议
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
// 对比情景改变
BOOL isChanged = [traitCollection hasDifferentColorAppearanceComparedToTraitCollection:previousTraitCollection];
}
复制代码
View 的 layoutSubView, ViewController 的 viewDidLayoutSubviews 均会触发
traitCollectionDidChange:
方法
二 、适配相关
-
Dynamic Color
动态颜色,根据当前情景自动切换颜色,iOS 13 新定义了一批 dynamic color, 大部分以 system 开头,也有以适用类别开头的,例如
labelColor,systemGroupedBackgroundColor
,可以直接用