1.UIColor
a.Assets创建
使用示例:
self.view.backgroundColor = [UIColor colorNamed:@"BgColor"];
b.代码创建
UIColor *bgColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
return [UIColor blueColor];
}
else{
return [UIColor cyanColor];
}
}];
2.UIImage
使用示例:
[imageView setImage:[UIImage imageNamed:@"icon_profile"]];
3.监听主题变化
主题变化时会调用如下方法:
containerViewWillLayoutSubviews()
containerViewDidLayoutSubviews()
可根据场景选择方法进行监听。如你是用的class非以上所列,可以通过监听app’s effectiveAppearance 属性。
注意:以上方法并非只有主题变化时才被调用,所以需要在方法中判断主题是否变化:
BOOL modeChanged = previousTraitCollection.userInterfaceStyle != [UITraitCollection currentTraitCollection].userInterfaceStyle;
4.主动切换主题
UIWindow *keyWindow = [UIApplication sharedApplication].windows.firstObject;
if (keyWindow.overrideUserInterfaceStyle == UIUserInterfaceStyleDark)
{
keyWindow.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
}
else
{
keyWindow.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
}
以上即为iOS 13 Dark Mode的实现方式,如果其他未考虑到的场景,或有错误不足之处,欢迎指出。