iOS 暗黑模式的适配总结

简介: iOS 暗黑模式的适配总结

iOS DarkMode Adapter

​ 就在上个月,国内的自媒体就开始疯传苹果要求开发者适配暗黑模式,并且还有谣言说,苹果通知微信强制适配暗黑模式,第二天微信的官方团队就宣布暗黑模式已经适配并且在下一个版本中就可以见到了。果然没有过多久就真的体验到了广大群众千呼万唤的暗黑模式,但是作为一个iOS使用者,我并没有觉得微信的暗黑模式有多好用,甚至觉得有的时候还会给我带来一些麻烦,最好能在微信中做一个开关,让用户自己选择显示 什么模式。但是后来一想,如果这样做了那是不是就和好几年前很流行的那种主题功能很类似了......感觉在鬼打墙.......

我作为一个低端的iOS开发者,当iOS13 出来时候,我们第一时间也没有选择适配,我们选择的是一种简单快捷的方案,全局关闭暗黑模式。只要做如下操作:

1.在Info.plist 文件中,添加UIUserInterfaceStyle key 名字为 User Interface Style 值为String,

2.将UIUserInterfaceStyle key 的值设置为 Light

这样你们就会看到界面就和之前一样了,但是还有一个很细微的地方要处理,那就是状态栏的样子并不受上面添加的值影响,所以我们还要对状态栏做适配

if (@available(iOS 13.0, *)) {
    [UIApplication sharedApplication].statusBarStyle =UIStatusBarStyleDarkContent;  }else{
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}

DarkMode 文字的颜色

​ 在测试的时候我发现,但我们用UILabel显示文字的时候,只要不去设置颜色,系统会自动的通过现实的模式自动的调节颜色。但是在实际的开发中,我们并不可能一直都用一个颜色,而且 也不可能都是和白色的。

​ 那么我们就来看看要怎么做到通过切换显示模式自动的切换文字的颜色呢?

​ 当你想到这个问题的时候,苹果都已经帮你解决了。在iOS13的SDK中哟这么一个函数

+ (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);

​ 这是一个动态颜色的设置,那么我们只要写一个UIColor的Category 就好了,统计一下我们的项目中都用到了什么样的颜色,这个时候也要UI设计师给你设计一下在暗黑模式下,各个文字对应的颜色是什么。这样我们就可以完成了对文字颜色的适配,其实后来我发现 不只是文字,只要是涉及到颜色的地方都可以这么处理。

​ 下面是我简单的写了几个颜色,仅供参考:

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIColor (DarkMode)

+ (UIColor *)textColor;

+ (UIColor *)viewControllerBackGroundColor;

@end

NS_ASSUME_NONNULL_END

#import "UIColor+DarkMode.h"

@implementation UIColor (DarkMode)
+ (UIColor *)colorWithHex:(UInt32)hex andAlpha:(CGFloat)alpha {
    int r = (hex >> 16) & 0xFF;
    int g = (hex >> 8) & 0xFF;
    int b = (hex)&0xFF;

    return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:alpha];
}
+ (UIColor *)textColor{
    if (@available(iOS 13.0, *)) {
          return [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trait) {
             if (trait.userInterfaceStyle == UIUserInterfaceStyleDark) {
                 return [UIColor whiteColor];
             } else {
                 return [UIColor blackColor];
             }
          }];;
      }else{
         return [UIColor blackColor];
      }
}

+ (UIColor *)viewControllerBackGroundColor{
    if (@available(iOS 13.0, *)) {
          return [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull trait) {
             if (trait.userInterfaceStyle == UIUserInterfaceStyleDark) {
                 return [UIColor blackColor];
             } else {
                 return [UIColor whiteColor];
             }
          }];;
      }else{
         return [UIColor whiteColor];
      }
}
@end

DarkMode Image Assets

上面说完了颜色的适配,下面就要来说一下还有图片的适配:

1.创建一个Assets文件(或在现有的Assets文件中)

2.新建一个图片资源文件(或者颜色资源文件、或者其他资源文件)

3.选中该资源文件, 打开 Xcode ->View ->Inspectors ->Show Attributes Inspectors (或者Option+Command+4)视图,将Apperances 选项 改为Any,Dark

4.执行完第三步,资源文件将会有多个容器框,分别为 Any ApperanceDark Apperance. Any Apperance 应用于默认情况(Unspecified)与高亮情况(Light), Dark Apperance 应用于暗黑模式(Dark)

5.代码默认执行时,就可以正常通过名字使用了,系统会根据当前模式自动获取对应的资源文件

相关文章
|
7月前
|
IDE API Android开发
安卓与iOS开发环境的差异及适配策略
在移动应用开发的广阔舞台上,Android和iOS两大操作系统各据一方,各自拥有独特的开发环境和工具集。本文旨在深入探讨这两个平台在开发环境上的关键差异,并提供有效的适配策略,帮助开发者优化跨平台开发流程。通过比较Android的Java/Kotlin和iOS的Swift/Objective-C语言特性、IDE的选择、以及API和系统服务的访问方式,本文揭示了两个操作系统在开发实践中的主要分歧点,并提出了一套实用的适配方法,以期为移动开发者提供指导和启示。
|
9月前
|
设计模式 监控 前端开发
深入解析iOS中的并发编程模式
【4月更文挑战第20天】 在当今移动应用开发中,提升程序的响应性和性能是至关重要的。特别是在iOS平台上,合理利用多线程和并发编程技术可以显著改善用户体验。本文旨在探讨几种在iOS开发中广泛使用的并发编程模式,包括线程、GCD(Grand Central Dispatch)、Operation Queues以及异步设计模式等。通过对这些技术的深入分析与比较,我们不仅将揭示各自的优势和潜在缺陷,还会展示如何结合它们以解决实际开发中遇到的并发挑战。
|
9月前
|
iOS开发
SwiftUI适配iOS16导航控制器引起的闪退
SwiftUI适配iOS16导航控制器引起的闪退
91 0
|
9月前
|
监控 iOS开发
iOS15适配问题:viewForSupplementaryElementOfKind表头和表尾复用闪退,UITableView section header多22像素等问题
iOS15适配问题:viewForSupplementaryElementOfKind表头和表尾复用闪退,UITableView section header多22像素等问题
149 0
|
9月前
|
调度 iOS开发 开发者
iOS 中的并发编程模式:理解 GCD 和 Operation Queues
【4月更文挑战第19天】 在现代 iOS 应用开发中,有效地管理线程和并发是至关重要的。为了确保用户界面的流畅性和后台任务的高效运行,开发者需要掌握并发编程技术。本文深入探讨了两种主要的并发模式:Grand Central Dispatch (GCD) 和 Operation Queues。我们将分析它们的工作原理,比较它们的特点,并通过实际代码示例说明如何在 iOS 应用中实现高效的并发处理。通过本文,读者将获得在 iOS 平台上进行多线程开发的实用知识,以及如何根据不同的应用场景选择最合适的并发工具。
|
小程序 开发工具 Android开发
Donut多端框架小程序打包适配ios和安卓app
腾讯新出了一个 Donut 多端框架,可以直接将微信小程序转成 ios 和 安卓 app,小程序开发者工具里也集成了 app 相关升级、调试和打包的功能,终于可以一套代码开发出3个客户端了!
295 0
Donut多端框架小程序打包适配ios和安卓app
|
安全 前端开发 开发工具
iOS12、iOS11、iOS10、iOS9常见适配
iOS12、iOS11、iOS10、iOS9常见适配
264 0
|
小程序 iOS开发
uniapp中IOS端小程序底部黑线适配的方法(整理)
uniapp中IOS端小程序底部黑线适配的方法(整理)
|
iOS开发
IOS 黑暗模式简单理解
IOS 黑暗模式简单理解
134 0
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
444 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    21
  • 3
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    141
  • 4
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    222
  • 5
    app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
    87
  • 6
    深入探索iOS开发中的SwiftUI框架
    143
  • 7
    ios样式开关按钮jQuery插件
    58
  • 8
    Android与iOS生态差异深度剖析:技术架构、开发体验与市场影响####
    74
  • 9
    深入探索iOS与Android操作系统的安全性差异
    102
  • 10
    安卓与iOS开发中的跨平台策略:一次编码,多平台部署
    173