Хватит менять строку состояния в iOS 13 - PullRequest
6 голосов
/ 21 сентября 2019

У меня уже есть светлая и темная тема в моем приложении.Я также поддерживал темный режим iOS 13, проблема в том, что даже когда выбран светлый или темный режим приложения, изменение темы iOS приводит к изменению цвета строки состояния, поэтому, когда включен темный режим ios, строка состояния не отображается влегкая тема в моем приложении.Я пытался предотвратить это с помощью этого блока кодов, но в моем случае это не сработало:

override var preferredStatusBarStyle: UIStatusBarStyle {
    switch Appearance.theme {
    case .dark:
        return .lightContent
    case .light:
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    case .apple:
        return .default
    }
}

Я добавил его в контроллер раздельного просмотра, я также добавил его в каждый контроллер, но ничего не изменилось.У кого-нибудь есть идеи как это исправить?У меня также есть такая же проблема для UITabbar и UISegmentedControl

Почему-то я должен сказать, что при выборе светлого и темного режима в моем приложении изменение темы iOS должно действовать в элементе приложения (строка состояния, панель вкладок, UISegmentedControl)

Большое спасибо

1 Ответ

2 голосов
/ 22 сентября 2019

Вы можете использовать overrideUserInterfaceStyle, чтобы заставить контроллеры принять определенный стиль в iOS13.

Чтобы решить вашу проблему, ваш код должен быть таким:

override var preferredStatusBarStyle: UIStatusBarStyle {
    switch Appearance.theme {
    case .dark:
        return .lightContent
    case .light:
        if #available(iOS 13.0, *) {
            return .darkContent
        } else {
            return .default
        }
    case .apple:
        return .default
    }
}


override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 13.0, *) {
         switch Appearance.theme {
         case .dark:
             overrideUserInterfaceStyle = .dark
         case .light:
             overrideUserInterfaceStyle = .light
         case .apple:
             overrideUserInterfaceStyle = .unspecified
         }
     }
}
...