iOS DarkMode,暗黑主题完整实现

1.UIColor

a.Assets创建


新建Color Set


设置mode和color

使用示例:

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


新建Image Set
添加图片

使用示例:

 [imageView setImage:[UIImage imageNamed:@"icon_profile"]];

3.监听主题变化

主题变化时会调用如下方法:

NSView

updateLayer()

draw(_:)

layout()

updateConstraints()


UIView

traitCollectionDidChange(_:)

layoutSubviews()

draw(_:)

updateConstraints()

tintColorDidChange()


UIViewController

traitCollectionDidChange(_:)

updateViewConstraints()

viewWillLayoutSubviews()

viewDidLayoutSubviews()


UIPresentationController

traitCollectionDidChange(_:)

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的实现方式,如果其他未考虑到的场景,或有错误不足之处,欢迎指出。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容