iOS13 深色模式与浅色模式适配讲解
https://www.jianshu.com/p/97b4fbf8b3b5
2019年6月4日凌晨,苹果在开发者大会上推出了新一代手机操作系统 iOS 13
,主要更新了照片应用、滑动输入和更多动画表情,还有就是增加了”深色模式“,优化了音量的调节方式。
深色模式”终于来了“。
在所有关于 iOS13
的更新项目里,“深色模式”是网友讨论最多的。该模式可以根据日出日落时间自动开启,开启后,不只有壁纸,所有的系统元素都会变成暗色,起到在夜里降低屏幕亮度、保护用户眼睛的作用。
实际上,苹果用户很早就开始呼吁 iOS
加入这个深色模式。如今 iOS13
正式发布深色模式,媒体和网友评论的口吻都是“终于来了”,“迟到的深色模式”。
对于 iOS
程序猿们而言,如何适配 iOS13
系统的深色模式呢?我推荐从以下几个方面去做适配,推荐参考项目 QPlayer 。
运用系统 API
如何运用系统 API
,请阅读这篇文章《iOS13 快速读懂深色模式 API》。
颜色相关的适配
- 不同模式的适配主要涉及颜色和图片两个方面的适配。
- 其中颜色适配,包括相关背景色和字体颜色。
- 当系统模式切换的时候,我们不需要如何操作,系统会自动渲染页面,只需要做好不同模式的颜色和图片即可。
UIColor
iOS13
之前UIColor
只能表示一种颜色,从iOS13
开始UIColor
是一个动态的颜色,在不同模式下可以分别代表不同的颜色。- 下面是
iOS13
系统提供的动态颜色种类,使用以下颜色值,在模式切换时,则不需要做特殊处理。
@interface UIColor (UIColorSystemColors)
#pragma mark System colors
@property (class, nonatomic, readonly) UIColor *systemRedColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemGreenColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemBlueColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemOrangeColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemYellowColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemPinkColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemPurpleColor API_AVAILABLE(ios(9.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemTealColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemIndigoColor API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
// 灰色种类, 在Light模式下, systemGray6Color更趋向于白色
@property (class, nonatomic, readonly) UIColor *systemGrayColor API_AVAILABLE(ios(7.0), tvos(9.0)) API_UNAVAILABLE(watchos);
@property (class, nonatomic, readonly) UIColor *systemGray2Color API_AVAILABLE(ios(13.0)) API_UNAVAILABLE(tvos, watchos