2016-03-24 2 views
2

Я хочу установить цвет status bar (Маленькая полоса сверху, где отображаются часы и батарея) на черном фоне с белым текстом. Как я могу это сделать ?Установите строку состояния на черный цвет

enter image description here

Мой подход до сих пор:

Я добавил следующее в info.plist

View controller-based status bar appearance --> NO 

и в viewController

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleDefault; 
} 

Однако стиль не меняется , Как я могу сделать строку состояния черной?

+1

Зачем устанавливать 'Просмотр состояния панели управления на основе контроллера' на' НЕТ'? Вы уверены, что не хотите, чтобы 'YES' там, учитывая, что вы используете контроллер вида для обеспечения стиля? – Sulthan

ответ

3

Для Xcode 8/IOS 10/Swift 3:

Изменения в строке состояния цвета фона временно на одной из точек зрения, добавляя цветной UIView под строкой состояния. Я помещал эти строки в viewWillAppear(). мой оттенок белый с прозрачностью 45%, но вы можете ввести любое непрозрачное или прозрачное значение UIColor.

let statusView = UIView(frame: CGRect(x: 0, y: 0, width:  self.view.bounds.width, height: 20)) 
statusView.backgroundColor = UIColor.white.withAlphaComponent(0.45) 
self.view.addSubview(statusView) 

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

Вы также можете перейти в UIScreen.main.bounds.size.width для ширины отображаемого фонового изображения моделируемой строки состояния. Не переустанавливайте ширину, иначе она не подходит для всех устройств должным образом.

В качестве альтернативы вы также можете изменить фон состояния во всем приложении, используя этот код. имейте в виду, что если даже если он помещен в viewWillAppear(), а не viewDidLoad(), другие виды по-прежнему будут использовать измененную строку состояния при навигации вперед/назад.

let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView 
let statusBar = statWindow.subviews[0] as UIView 
statusBar.backgroundColor = UIColor.white.withAlphaComponent(0.45) 
2

Вы можете сделать текст белым по телефону:

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true) 

Строка состояния имеет прозрачный фон. Невозможно изменить это. Вы можете прикрепить к нему представление в качестве фона.

+0

Как запустить навигационную панель из строки состояния? Поэтому, если моя панель навигации черная, тогда статус также будет выглядеть как черный. Как это может быть сделано ? – Illep

+0

Используйте навигационную панель, связанную с навигационным контроллером. Например, в вашем раскадровке нажмите на контроллер вида, на котором вы хотите включить навигационную панель. Затем нажмите editor-> embed in -> контроллер навигации. Затем нажмите «Сценарий навигационного контроллера», нажмите «Панель навигации», затем измените значение «Тень» в инспекторе на черный. – beyowulf

+0

Или 'self.navigationController? .navigationBar.barTintColor = UIColor.blackColor()' – beyowulf

2

Вы должны следовать 3 шага в Xcode-8.1 и прошивкой 10:

enter image description here

enter image description here

enter image description here

Итак, наконец, мы можем получить желаемый результат:

enter image description here

+0

@Natalia Chodelski: Как вы думаете, почему вы downvote или просто downvoated без причины. С помощью downVoting вы просто показываете незрелое кодирование. Вы можете отредактировать мой ответ и показать обновленный снимок экрана. Показать разницу в нем. Что будет отражать настоящий дух команды :) Спасибо. – Shrawan

+0

Я проигнорировал ваш ответ по нескольким причинам: вы разместили изображение, а не код, который, по моему мнению, был менее полезным для программистов, которые сталкиваются с ним, поскольку он не может быть скопирован. Кроме того, точность - первая строка в скриншоте .plist «Просмотр состояния панели состояния на основе контроллера = NO» здесь ничего не делает, потому что вы на самом деле добавляете цветное представление в верхней части основного представления в строке состояния, не контролируя с помощью методов API. – Natalia

+0

Эта строка остановит действие тематического эффекта при работе с использованием обычных методов api-байт-строки, потому что на самом деле он сообщает приложению, что тема глобальной строки состояния должна контролировать все строки состояния, но вы обходите это с помощью кода, добавляя подвью под ним. И 3-я строка из скриншота .plist ничего не делает, либо 'UIStatusbarStyle.lightContent' должен сделать текст строки состояния белым, но вместо этого отображается тот же серый цвет фонового представления. Так что эта линия тоже бессмысленная. – Natalia

0

Goto Plist файл

a) Set the value "View controller-based status bar appearance" to NO 
b) Set the value "Status bar style" to UIStatusBarStyleLightContent 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(version) ([[[UIDevice currentDevice] systemVersion] compare:version options:NSNumericSearch] != NSOrderedAscending) 

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) 
    { 
     UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)]; 
     view.backgroundColor=[UIColor blackColor]; 
     [self.window.rootViewController.view addSubview:view]; 
    } 
    return YES; 
} 

Это фиксированный статус бар цвет для меня. Надеюсь, поможет.

1

Простое решение:

Перейти к главной раскадровке (тот, которая загружается при запуске приложения, после того, как выплеск делается), а также изменить цвет фона верхнего уровня UIView до черного.

Если вам нужно, чтобы остальная часть экрана имела другой цветной фон, просто создайте еще один UIView в качестве подзапроса верхнего уровня, установите его рамку, чтобы начать под верхним макетом, и установите его цвет на независимо от того, какой цвет вам нужен.

Вам все равно необходимо установить флаги plist, как указано в других ответах.

Смежные вопросы