iOS应用程序中的日夜模式

时间:2017-02-16 13:10:51

标签: ios objective-c uiappearance

目前,我正在开发基于文章的应用程序。它具有日/夜阅读模式功能。对于夜间模式,应用背景颜色应为黑色,而前景组件应为白色。我已经为UIView,UILabel,UIButton和UITextView创建了类别,但我不知道它是否正确。请给我一些建议。

如何在iOS应用程序中实现/实施日/夜模式?

3 个答案:

答案 0 :(得分:0)

我认为你最好的选择是使用外观代理而不是类别。子类UIView(基本上任何UI)的任何内容都会向您公开。

只需设置所需的外观,默认情况下所有元素都会继承。请看以下示例:

[[UIButton appearance] setBackgroundColor:[UIColor blackColor]];
[[UIButton appearance] setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

默认情况下,所有UIButtons都具有这些属性。

您可以在应用程序启动时立即执行检查,然后根据此设置UI的外观。

答案 1 :(得分:0)

如果你这样做,例如:UILabel.appearance().textColor = UIColor.white,这很好。 只要不要忘记在启用暗模式时设置UserDefaults键,这样当应用程序重新启动时,它将保持以前的外观。此外,您可能希望为导航控制器,标签栏和键盘设置黑色,为状态栏元素设置白色,为导航控制器和标签栏设置标题(在AppDelegate中,didFinishLaunchingWithOptions:

UINavigationBar.appearance().barTintColor = UIColor.black
UIApplication.shared.statusBarStyle = .lightContent
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white]
UITabBar.appearance().barTintColor = UIColor.black

答案 2 :(得分:0)

我通过制作外观管理器实现了类似的行为,可以使用不同的配色方案进行配置。在其中我有以下功能: -(UIColor*) colorForLabelInHomeScreen; 之后,您将需要一个用户默认值来保留您当前的配色方案以及在用户更改配色方案后重新加载屏幕的方法(触发通知,因为它的一对多关系是一个不错的选择)。

这种方法的一个好处是可以使用新的配色方案轻松扩展。