2013-12-12 6 views
1

Я хотел бы изменить цвет строки состояния от белого до черного нажатием одной кнопки, только в программно с одним ViewControllerКак изменить PreferredStatusBarStyle программно

Это код:

- (UIStatusBarStyle)preferredStatusBarStyle { 
NSLog(@"PreferredStatusBarStyle"); 
if(nav_bar.alpha==1) 
{ 
    NSLog(@"->UIStatusBarStyleBlackOpaque"); 
    return UIStatusBarStyleBlackOpaque; 
} 
else 
{ 
    NSLog(@"->UIStatusBarStyleLightContent"); 
    return UIStatusBarStyleLightContent; 
}} 

затем При нажатии кнопки действует:

[self setNeedsStatusBarAppearanceUpdate]; 

НО это не работает!

Когда я нажимаю кнопку, записывайте правильный статус в соответствии с navbar.alpha, но цвет текста в строке состояния остается UIStatusBarStyleBlackOpaque, как при отображении вида.

ответ

0

то, что вам нужно сделать, это вызвать -setStatusBarStyle: анимированные: метод через общего применения, как этот

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; 

вы можете использовать его без анимированного параметра а. иметь в виду, что UIStatusBarStyleBlackOpaque осуждается в прошивкой 7, документация говорит, что вы хотите использовать UIStatusBarStyleLightContent вместо

редактировать: жаль, если и хотите использовать preferredStatusBarStyle, посмотрите на эту preferredStatusBarStyle isn't called

+0

[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent анимированный: YES]; – ikanimo

+2

Это устарело в iOS 9. Другие решения? – IIllIIll

+0

@Arcrammer Я ответил выше – rdougan

5

setStatusBarStyle:animated: устарела. В iOS9 вы можете добиться того же, используя preferredStatusBarStyle и setNeedsStatusBarAppearanceUpdate.

В вашем View Controller:

override func preferredStatusBarStyle() -> UIStatusBarStyle { 
    if (condition) { 
     return .LightContent 
    } 

    return .Default 
} 

И тогда, когда ваше состояние меняется:

self.setNeedsStatusBarAppearanceUpdate() 
Смежные вопросы