UIStatusBar отображается в черном в UITabBarViewController ios11

Проблема проста:

  • Приложение основано на UITabBarViewController
  • 3 Вкладки в контроллерах
  • Представления TabBar настроены в viewDidLoad для UITabBarViewController

При запуске UIStatusBar отображаются в черном цвете фона Launch Status Bar

Переход на любую вкладку UIStatusBar станет цветным!

Правильная строка состояния

Что мне не хватает?

Ответ 1

У меня была аналогичная проблема несколько месяцев назад - я решил ее, добавив следующие строки в мой AppDelegate. Ниже приведен мой быстрый код, я уверен, что вы знаете синтаксис objective-c:

    // Setup general NavBar appearance
    UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)
    UINavigationBar.appearance().shadowImage = UIImage()
    UINavigationBar.appearance().backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
    UINavigationBar.appearance().isTranslucent = true
    UINavigationBar.appearance().tintColor = UIColor.white
    UIApplication.shared.statusBarStyle = .lightContent // => this would be the solution

Я думаю, что последняя строка кода будет интересна для вас. Важно установить эти изменения в AppDelegate.

Ответ 2

У меня была аналогичная проблема. Несмотря на то, что проблема с OP не связана напрямую с панелью вкладок, я тоже видел, что моя полупрозрачная строка состояния оказалась непрозрачной и нажала вниз.

После переноса моего проекта с Swift 3 с Xcode 8 на Swift 4 с Xcode 9, я начал испытывать ту же проблему, когда строка состояния, казалось, толкала контент вниз, когда он был видимым. Сначала я подумал, что это проблема с предпочтительным UIStatusBarStyle, который я установил (я использовал UIStatusBarStyleLightContent), но он работал правильно.

Проблема заключалась в том, что при переходе с Xcode 8 на 9 subview в одном из моих контроллеров просмотров был неуместен в Storyboard. Ограничение, которое ранее привязывало этот вид к вершине контроллера представления, указывало неверно указывая на представление (с полями) вместо руководства Top Layout. Переключение этого ограничения для использования руководства Top Layout Guide со значением 0 решило мою проблему.

Раскадровка

Ответ 3

В didFinishLaunchingWithOptions метод устанавливает стиль строки состояния для подсветки содержимого

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[application setStatusBarStyle:UIStatusBarStyleLightContent];

и в каждом представленииController вернет это:

-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}

или если вы используете UINavigationController, тогда также добавьте эту строку кода в каждый viewController viewController (или создайте baseViewController) метод viewWillAppear

- (void)viewWillAppear:(BOOL)animated{

[super viewWillAppear:animated];

self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;

Ответ 4

Для меня работает следующий подход

final class StatusbarStyle {
    static let shared = StatusbarStyle()
    var style:UIStatusBarStyle = .default
}

а затем, когда мне нужно изменить цвет строки состояния, пишу следующее:

StatusbarStyle.shared.style = .default
navigationController?.setNeedsStatusBarAppearanceUpdate()