iOS 开发 oc 如何在页面里获取当前是亮色模式还是暗黑模式

168 阅读2分钟

在iOS开发中,Objective-C(OC)可以通过traitCollection属性来获取当前界面的userInterfaceStyle,从而判断当前是亮色模式还是暗黑模式。以下是详细的步骤和示例代码:

1. 在视图控制器中获取userInterfaceStyle

在视图控制器中,可以通过重写viewDidLoad方法来获取当前的界面风格。以下是一个示例:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 检测当前界面风格

if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {

NSLog(@"当前系统风格:Dark 🌙"); // 暗黑模式

self.view.backgroundColor = [UIColor blackColor];

} else {

NSLog(@"当前系统风格:Light ☀️"); // 亮色模式

self.view.backgroundColor = [UIColor whiteColor];

}

}

@end

2. 监听界面风格的变化

如果需要在界面风格发生变化时执行特定的操作,可以重写traitCollectionDidChange:方法。以下是一个示例:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 检测当前界面风格

if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {

NSLog(@"当前系统风格:Dark 🌙"); // 暗黑模式

self.view.backgroundColor = [UIColor blackColor];

} else {

NSLog(@"当前系统风格:Light ☀️"); // 亮色模式

self.view.backgroundColor = [UIColor whiteColor];

}

}

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {

[super traitCollectionDidChange:previousTraitCollection];

if (@available(iOS 13.0, *)) {

if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {

NSLog(@"切换到 Dark 模式");

self.view.backgroundColor = [UIColor blackColor];

} else {

NSLog(@"切换到 Light 模式");

self.view.backgroundColor = [UIColor whiteColor];

}

}

}

@end

3. 使用动态颜色

为了更好地适配不同的界面风格,可以使用动态颜色。动态颜色会根据当前的界面风格自动调整。以下是一个示例:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIColor *dynamicColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {

if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {

return [UIColor whiteColor];

} else {

return [UIColor blackColor];

}

}];

self.titleLabel.textColor = dynamicColor;

}

@end

4. 获取全局的traitCollection

如果需要获取全局的traitCollection,可以通过UITraitCollection.currentTraitCollection来获取。以下是一个示例:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIUserInterfaceStyle currentStyle = UITraitCollection.currentTraitCollection.userInterfaceStyle;

if (currentStyle == UIUserInterfaceStyleDark) {

NSLog(@"当前系统风格:Dark 🌙"); // 暗黑模式

self.view.backgroundColor = [UIColor blackColor];

} else {

NSLog(@"当前系统风格:Light ☀️"); // 亮色模式

self.view.backgroundColor = [UIColor whiteColor];

}

}

@end

通过以上方法,可以在iOS开发中有效地获取和响应traitCollection.userInterfaceStyle的变化,从而实现对亮色模式和暗黑模式的支持。