2017-02-15 14 views
1

Я хочу установить цвет строки состояния того же цвета, что и панель навигации. когда я пытаюсь настроить навигацию и строку состояния на тот же цвет, панель навигации всегда отображается светлее, чем строка состояния.Строка состояния и панель навигации не имеют одинакового цвета iOS Swift

Это то, что я хочу:

enter image description here

Мой результат:

enter image description here

Код в AppDelegate:

Строка состояния:

UIApplication.sharedApplication().statusBarStyle = .Default 
    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView 
    if statusBar.respondsToSelector(Selector("setBackgroundColor:")) 
{ 
     statusBar.backgroundColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0) 
     statusBar.tintColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0) 
} 

Панель навигации:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] 
     UINavigationBar.appearance().backgroundColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0) 
     UINavigationBar.appearance().tintColor = UIColor.whiteColor() 
     UIApplication.sharedApplication().statusBarHidden = false 
     UIApplication.sharedApplication().statusBarStyle = .Default 

Может кто-нибудь дать мне какие-либо предложения о том, как решить эту проблему.

Заранее благодарен!

+1

набор цвет View с таким же цветом навигации и это будет делать то, что вы хотите – Hosny

+0

Это не так просто, как тот факт, вы находитесь используя 'whiteColor' в качестве оттенка на' UINavigationBar' и 'UIColor (красный: 43/255.0, зеленый: 79/255.0, синий: 133/255.0, alpha: 1.0)' в строке состояния –

+0

Обновите себя до Swift 3, пожалуйста. – matt

ответ

1

Для достижения желаемого результата установите стиль строки состояния по умолчанию и установите для параметра UINavigationBar.appearance() barTintColor требуемый цвет.

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] UINavigationBar.appearance().barTintColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0) UIApplication.sharedApplication().statusBarStyle = .Default

+0

Спасибо, что получил ваш желаемый результат с помощью вашего кода! – Melchior

2

У меня не было проблем с получением желаемого результата:

enter image description here

Вот код, который я использовал (Swift 3):

let app = UINavigationBar.appearance() 
// nav bar color => your color 
app.barTintColor = UIColor(red: 43/255.0, green: 79/255.0, blue: 133/255.0, alpha: 1.0) 
app.isTranslucent = false 
// status bar text => white 
app.barStyle = .black 
// nav bar elements color => white 
app.tintColor = .white 
app.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white] 

Что касается того, что вы» re делать, трудно понять, с чего начать. Прежде всего, эта линия является полностью незаконным (и, вероятно, получить ваше приложение запрещен из App Store):

let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView 

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

Что касается настройки цвета панели навигации, не забудьте, что по умолчанию это полупрозрачный. Вы не можете точно установить его цвет, не делая его непрозрачным. Кроме того, вы не должны устанавливать свой backgroundColor. Вы должны либо установить его barTintColor, либо дать ему фоновое изображение (то есть способ получить лучший контроль над его цветом).

Короче говоря, все, что вы делаете, неверно, поэтому трудно сочувствовать факту, что он не «работает».

+0

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

0

Для меня ключ был изменить атрибут isTranslucent:

navigationBar.isTranslucent = false 
navigationBar.barTintColor = PlateColors.mainRed 
navigationBar.backgroundColor = PlateColors.mainRed