如何设置iOS 13深色模式大标题颜色?

时间:2019-10-01 14:37:51

标签: ios uinavigationbar ios13 ios-darkmode large-title

我在我的应用中使用

let navigationBar = UINavigationBar.appearance()
navigationBar.largeTitleTextAttributes = [
    NSAttributedString.Key.font: UIFont.SFProDisplay(ofSize: 34, weight: .bold),
    NSAttributedString.Key.foregroundColor: UIColor.custom
]

static var custom: UIColor {
    return UIColor(named: "color_custom")!
}

color set

其中的颜色设置为color_custom。 但是,当在颜色模式之间切换时,它仅使用任何外观颜色。不使用深色外观。为什么?

添加:

经过一些研究,我认为接下来应该增加一个问题:在我的应用中,我使用切换器在模式之间进行切换。 Storage.isDarkModeOn = newState // saving in user defaults。然后:

class PapaViewController: UIViewController {
    if #available(iOS 13.0, *) {
        overrideUserInterfaceStyle = Storage.isDarkModeOn ? .dark : .light
    }
}

PapaViewController是我应用程序中所有UIViewControllers的父类。因此,如果overrideUserInterfaceStyle == .dark和设备颜色模式== .light,则会显示该错误。如果这样,我将设备颜色模式更改为.dark,则大标题看起来像预期的那样。

2 个答案:

答案 0 :(得分:1)

您现在显示的代码 now 的问题仅在于您在与错误的视图控制器通信。不是您需要更改其self您的视图控制器(override):它是 root 视图控制器,在本例中为可能是导航控制器。

class PapaViewController: UIViewController {
    if #available(iOS 13.0, *) {
        self.navigationController?.overrideUserInterfaceStyle = // ...
    }
}

答案 1 :(得分:0)

您是否尝试过使用iOS 13的新外观API?

https://developer.apple.com/documentation/uikit/uinavigationbarappearance

示例:

let style = UINavigationBarAppearance()
style.largeTitleTextAttributes = [.font: #YOURFONT#]

navigationController?.navigationBar.standardAppearance = style
navigationController?.navigationBar.scrollEdgeAppearance = ...
navigationController?.navigationBar.compactAppearance = ...