iOS Dark模式

1,154 阅读1分钟

禁用跟随系统的深色模式

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可以获取不同模式下的对应颜色

图片

1628824856959.jpg

勾选后直接填对应图片就可以

状态栏颜色-全局配置

ios13以前,可以通过


UIApplication.shared.statusBarStyle = .darkContent

修改状态栏颜色

ios13以后废弃了这个方法,视图相关的用UIStatusBarManager来管理.

但是UIStatusBarManagerstatusBarStyle是只读的,所以猜想不希望开发者使用这个代码全局配置状态栏,而是通过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
    }

状态栏隐藏

全局隐藏

1628823572193.jpg

单个隐藏

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)
        }