相关文章推荐

本来几个月前就应该更新这篇iOS 13的DarkMode文章的…然而发现放到了某个未命名的.md文件里头去了…哈哈,整理一下重新发一下

首先,我看到好多朋友在群里问,为什么用新编译器(Xcode 11)后开了darkmode之后开启darkmode.[UIColor whiteColor]这种设置颜色之后会变成黑的.这是因为iOS 13(Xcode 11及以上)的UIColor变成了dynamic的.

不适配黑暗模式解决方法

  • 1.使用低于Xcode 11的Xcode版本.
  • 2.不要使用"动态"的颜色.推荐使用手动创建的rgb色.
  • 3.在info.plist中添加key: UIUserInterfaceStyle .value为String类型的 Light
  • 4.在UIViewController中设置 self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight .记得判断一下版本.

适配黑暗模式的情况

首先,我们看下和darkmode有关的枚举

UIUserInterfaceStyle

typedef NS_ENUM(NSInteger, UIUserInterfaceStyle) {
	///  未确认
    UIUserInterfaceStyleUnspecified,
    /// 亮色模式
    UIUserInterfaceStyleLight,
    /// 黑暗模式
    UIUserInterfaceStyleDark,
} API_AVAILABLE(tvos(10.0)) API_AVAILABLE(ios(12.0)) API_UNAVAILABLE(watchos);
 

注意的是iOS 13以上,所有系统提供的color都变成了dynamiccolor.也就是说,.light的情况下和.dark的情况下的表现的颜色是不一样的.然而,cgcolor还是非动态的.

UIColor的适配

UIColor *dynamicColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
    switch (traitCollection.userInterfaceStyle) {
        case UIUserInterfaceStyleLight: {/// 亮色模式颜色
            return [UIColor whiteColor];
            break;
        case UIUserInterfaceStyleDark: {/// 暗色模式颜色
            return [UIColor whiteColor];
            break;
        default: {
            return [UIColor whiteColor];
            break;
 

注意的是.如果颜色没有被使用.这个block就不会有回调.

Asset.xcassets方式

创建Color Set
在这里插入图片描述
在这里插入图片描述

使用也比较简单

[UIColor colorNamed:@"assetname"];

UIImage的适配

UIImage *image = [UIImage new];
[image.imageAsset registerImage:[UIImage imageNamed:@"1"] withConfiguration:[[UIImageConfiguration alloc] configurationWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleLight]]];
[image.imageAsset registerImage:[UIImage imageNamed:@"2"] withConfiguration:[[UIImageConfiguration alloc] configurationWithTraitCollection:[UITraitCollection traitCollectionWithUserInterfaceStyle:UIUserInterfaceStyleDark]]];
self.imageView.image = image;
Asset.xcassets方式

DarkMode的补充说明

UITraitCollection直接翻译就是UI有关的特性集合.像是Darkmode切换、当前设备是哪个os的之类的.我们就是需要其中的userInterfaceStyle属性.

直接获取当前的userInterfaceStyle

UITraitCollection *traitCollection = [UITraitCollection currentTraitCollection];
switch (traitCollection.userInterfaceStyle) {
	case UIUserInterfaceStyleUnspecified:
		break;
	case UIUserInterfaceStyleLight:
		break;
	case UIUserInterfaceStyleDark:
		break;
	default:
		break;

通过UIView与UIViewController获取改变后的状态

/// 因为UIView以及UIViewController都实现了如下的代理,可以通过如下代理获取UITraitCollection的改变后的状态.
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection

强制设置某个View或者VC的显示模式

self.overrideUserInterfaceStyle =  UIUserInterfaceStyleDark;

强制设置所有View、VC的显示模式

ps:设置window的rootVC也是和上面的设置一样只会影响当前VC.modal出来其他的还是不会改变.如果设置window的属性的话.就会改变所有的了

((SceneDelegate *)[UIApplication sharedApplication].connectedScenes.anyObject.delegate).window.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;

或是把info.plist中的UIApplicationSceneManifest删掉.使用下面的"老代码".

[UIApplication sharedApplication].delegate.window.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
                    本来几个月前就应该更新这篇iOS 13的DarkMode文章的…然而发现放到了某个未命名的.md文件里头去了…哈哈,整理一下重新发一下首先,我看到好多朋友在群里问,为什么用新编译器(Xcode 11)后开了darkmode之后开启darkmode.[UIColor whiteColor]这种设置颜色之后会变成黑的.这是因为iOS 13(Xcode 11及以上)的UIColor变成了dynam...
				
苹果在iOS10开放了SiriKit接口给第三方应用。目前,QQ已经率先适配了Siri的发消息和打电话功能。这意味着在iOS10中你可以直接告诉Siri让它帮你发QQ消息和打QQ电话了,听起来是不是很酷炫?那么第三方应用使用Siri的体验究竟如何?哪些应用可以接入SiriKit?接入SiriKit又需要做哪些工作呢?这篇文章会为你一一解答这些疑惑。图1用Siri发QQ消息效果展示我们都知道Siri是iPhone手机中的智能语音助手,那么什么是SiriKit呢?SiriKit是苹果为第三方应用支持Siri提供的开发框架。在官方文档中,SiriKit将对不同场景的语音支持划分为不同的domain,
就在前不久,苹果刚刚对外正式发布了新的操作系统IOS10。悲剧的是就在发布新系统的当天公司就急着要发布一个新版本,问题来了。。。谁知道APP在IOS10上会遇到什么鬼情况!最怕的就是闪退。。。于是在上线前做了很多关于IOS10的适配工作,其中也踩了很多坑。所以在这里记录总结一下。 1、自动管理证书 首先要说的就是Xcode8。打开Xcode8最明显的就是Targets–>General下的自动管理证书模块。以前对于新手来说无论是开发还是打包都必须要被苹果的开发签名系统虐上几遍才能真正明白它的原理和规程。现在貌似直接勾上“Automatically manage signing”,Xcode8
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/shifang07/article/details/101307247 导读:Material Design & iOS 13 黑暗模式总结探索 暗黑模式苹果开发文档 如何不进行系统切换样式的适配 1、同一工程...
@interface UIImageView (Utils) - (void)setImageRenderingMode:(UIImageRenderingMode)renderMode; @implementation UIImageVie
UIImage *image = [UIImage imageNamed:@"Hello"]; // 赋值到Xcode工程中,肉眼不可见空格 通过上述代码获取图片信息,但是死活获取不到。 尝试了网上的方法使用Bundle,依然无果 + (nullable UIImage *)imageNamed:(NSString *)name inBundle:(nullable NSBundle *)bundle withConfiguration:(nullable UIImageConfiguration.
"backgroundTextStyle": "@backgroundTextStyle", "navigationBarBackgroundColor": "@navBackgroundColor", "navigationBarTitleTe
在 2019 年的 Google I/O 和 Apple WWDC 上,新露面的 Android 10 和 iOS 13 都宣布将支持 Dark Theme 也就是我们常说的暗黑模式,并提供相关 API 供开发者适配。 那么,为什么我们需要暗黑模式?暗黑模式到底有什么好处?Android 开发者该如何适配暗黑模式呢?今天这篇文章就告诉你。 Why we need Dark Theme? 暗色主题的...
UIImage* imageWithUIColor(UIColor* color) { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor.