0

在我的应用程序中,我使用

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_custom。但是在颜色模式之间切换时,它只使用 Any Appearance 颜色。未使用深色外观。为什么?

添加:

经过一些研究,我认为接下来应该添加到问题中:在我的应用程序中,我使用切换器在模式之间切换。 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然后大标题看起来像预期的那样。

4

2 回答 2

1

您现在显示的代码的问题仅仅是您正在与错误的视图控制器交谈。您需要更改的不是您的视图控制器 ( self) :它是视图控制器,在这种情况下可能是导航控制器。override

class PapaViewController: UIViewController {
    if #available(iOS 13.0, *) {
        self.navigationController?.overrideUserInterfaceStyle = // ...
    }
}
于 2019-10-03T18:33:04.817 回答
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 = ...
于 2019-10-02T10:54:06.223 回答