앱을 개발하면 위의 화면처럼 상단 네비게이션바의 색상을 어두운 색으로 사용할때도 있다. 그럴때 상단의 스테이터스바 글자가 검은색이여서 안보이는데 이럴때 상단 스테이터스바 글자의 색상을 하얀색으로 바꿔서 사용해왔다. 코드는 다음과 같다.
1 |
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; |
그런데!!!
1 2 3 |
// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system. @property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED; - (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED; |
iOS9 부터 리젝됬다. 아 진짜 왜… 해당 기능을 사용하라는데 헤더파일에 가서 해당 메소드에 주석을 보면 해당 메소드를 오버라이드 해서 사용하라고 써져있다.
1 2 |
// These methods control the attributes of the status bar when this view controller is shown. They can be overridden in view controller subclasses to return the desired status bar attributes. - (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault |
그런데! 왜! 해당 메소드가! 콜이! 안되는데!!! 으ㅏ아아아아아ㅏ info.plist에 View controller-based status bar appearance 키값을 NO로 설정해보라고 해서 NO도 해보고 YES도 해보고 빌드를 하고 하고 또 해도 안되는데!! 으악!!!!
이것저것 시도해보다가 찾은 방법은 이거다.
1 |
[self navigationController].navigationBar.barStyle = UIBarStyleBlack; |
해당 네비게이션 컨트롤러의 테마를 결정하는데 네비게이션의 테마를 검은색/흰색으로 결정 할 수 있다. 이 네비게이션바의 테마 색상에 반전되서 스테이터스바 색상이 결정된다. 정식방법은 아니지만 색상이 안바뀌어 울고 싶을때는 이런 편법도 좋은거같다. UIBarStyle안에 UIBarStyleBlackOpaque, UIBarStyleBlackTranslucent는 디플리케이티드 되었으니 기본이나 검정색만 사용하도록 하자
1 2 3 4 5 6 7 |
typedef NS_ENUM(NSInteger, UIBarStyle) { UIBarStyleDefault = 0, UIBarStyleBlack = 1, UIBarStyleBlackOpaque = 1, // Deprecated. Use UIBarStyleBlack UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES } __TVOS_PROHIBITED; |