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()