【问题标题】:Day Night Mode in iOS applicationiOS 应用程序中的日夜模式
【发布时间】:2017-02-16 13:10:50
【问题描述】:

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

如何在iOS应用中实现/实现Day/Night模式?

【问题讨论】:

标签: ios objective-c uiappearance


【解决方案1】:

我认为您最好的选择是使用外观代理而不是类别。任何子类 UIView(所以基本上是任何 UI)都会向您展示它。

只需将这些设置为您想要的外观,默认情况下所有元素都会继承此外观。举个例子:

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

现在所有 UIButtons 都将默认具有这些属性。

您可以简单地在您的应用在一天中的某个时间启动时实施检查,然后根据此设置 UI 的外观。

【讨论】:

    【解决方案2】:

    如果您这样做,例如: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
    

    【讨论】:

      【解决方案3】:

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

      这种方法的一个优点是可以很容易地使用新的配色方案进行扩展。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-02
        • 2022-11-10
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多