禁用跟随系统的深色模式
info.plist的Appearance设置为Light
深色模式
每个viewcontroller都有overrideUserInterfaceStyle
属性,
public enum UIUserInterfaceStyle : Int {
case unspecified = 0 // 跟随系统
case light = 1 // 浅色
case dark = 2 // 深色
}
可以通过替换keywindow的overrideUserInterfaceStyle
属性来切换模式,keywindow下的所有view将会重新渲染
动态颜色
UIColor {
$0.userInterfaceStyle == .dark ? dark : light
}
UIColor新增了api可以获取不同模式下的对应颜色
图片
勾选后直接填对应图片就可以
状态栏颜色-全局配置
ios13以前,可以通过
UIApplication.shared.statusBarStyle = .darkContent
修改状态栏颜色
ios13以后废弃了这个方法,视图相关的用UIStatusBarManager
来管理.
但是UIStatusBarManager
的statusBarStyle
是只读的,所以猜想不希望开发者使用这个代码全局配置状态栏,而是通过info.plist来配置
info.plist配置
View controller-based status bar appearance
如果设置为yes,则每个控制器都可以控制自己的状态栏颜色; 如果设置为no,则viewcontroller的方法不会调用. 这里因为先要全局配置,设置为no
Status bar style
这个配置是设置全局状态栏的模式的.
—
上面两个配置使用,就可以全局同意配置状态栏颜色
状态栏颜色-单个配置
View controller-based status bar appearance
需要设置为true,每个控制器可以控制自己的状态栏
控制器重写方法
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
状态栏隐藏
全局隐藏
单个隐藏
View controller-based status bar appearance
需要设置为true,每个控制器可以控制自己的状态栏
override var prefersStatusBarHidden: Bool {
true
}
获取当前状态栏模式
if let manager = UIApplication.shared.windows.first?.windowScene?.statusBarManager {
print(manager.statusBarStyle.rawValue)
}