override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
특정 ViewController에 대해 ViewBar에서 위의 코드를 사용하여 statusBar 색상을 White로 설정하면 iOS8에서 작동하지 않습니다 . 어떤 제안? UIApplication.sharedApplication 메소드를 사용하면 전체 앱의 Info.plist에서 필요한 변경 후 색상이 변경됩니다.
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
일부 필수 및 특정 ViewController 의 상태 표시 줄 색상을 어떻게 변경 합니까?
답변
모든 제안 사항을 읽고 몇 가지 사항을 시도한 후 다음 단계를 사용하여 특정 뷰 컨트롤러에서 작동하도록 할 수 있습니다.
첫 번째 단계:
info.plist를 열고 ” 컨트롤러 기반 상태 표시 줄보기 “라는 새 키 를 NO에 삽입하십시오.
두 번째 단계 (설명 만하면됩니다.)
일반적으로 AppDelegate의 application (_ : didFinishLaunchingWithOptions 🙂 메소드에 다음 코드를 넣습니다.
스위프트 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
스위프트 3
UIApplication.shared.statusBarStyle = .lightContent
그러나 이것은 모든 ViewController에 영향 을 미칩니다 statusBarStyle
.
따라서 특정 ViewController에 대해 이것을 작동시키는 방법-마지막 단계 :
당신은을 변경할의 ViewController 파일 열기 statusBarStyle
및에 다음 코드를 넣어 viewWillAppear()
,
스위프트 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
스위프트 3
UIApplication.shared.statusBarStyle = .lightContent
또한 viewWillDisappear()
해당 특정 viewController에 대한 메소드를 구현하고 다음 코드 줄을 넣으십시오.
스위프트 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
스위프트 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
이 단계는 먼저 statusBarStyle
특정 뷰 컨트롤러의를 변경 한 다음 default
특정 뷰 컨트롤러가 사라지면 다시 변경합니다 . (가) 구현되지 않음 viewWillDisappear()
변경됩니다 statusBarStyle
의 새로운 정의 된 값으로 영구적를UIStatusBarStyle.LightContent
답변
(2019 년 9 월 20 일 현재)
스위프트 5 , 스위프트 4.2 , 스위프트 4
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
답변
NavigationController가 포함 된 Swift 4.2 솔루션
첫 번째 단계:
당신의 Info.plist를 열고 “라는 이름의 새 키 삽입 보기 컨트롤러 기반 상태 표시 줄의 모양을 “나 UIViewControllerBasedStatusBarAppearance
에 YES 각 VC가 자신의 상태 속성을 사용할 수 있도록합니다.
두번째 단계
각 VC에서 다음과 같이 preferredStatusBarStyle 속성을 재정의하십시오 .
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent //.default for black style
}
마지막 단계
사용자 정의 NavigationController 클래스에서 preferredStatusBarStyle 속성을 재정의하십시오 .
class NavigationController : UINavigationController {
override var preferredStatusBarStyle : UIStatusBarStyle {
if let topVC = viewControllers.last {
//return the status property of each VC, look at step 2
return topVC.preferredStatusBarStyle
}
return .default
}
답변
나는이 튜토리얼을 따라 갔고 그것은 나를 위해 일했다. 그러나주의 사항이 있는지 확실하지 않습니다.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
- info.plist를 열고로 설정
UIViewControllerBasedStatusBarAppearance
하십시오false
. - 의
AppDelegate.swift
를 포함하는 의 첫 번째 함수에서didFinishLaunchingWithOptions
원하는 색상을 설정하십시오.
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
-
스위프트 3 업데이트 *
UIApplication.shared.statusBarStyle = .lightContent
답변
여기에 10 억 답변이 있으므로 확장 형식으로 다른 것을 추가하지 않는 이유를 생각했습니다 (@ Cœur의 도움으로)
스위프트 3
신장:
extension UIApplication {
class var statusBarBackgroundColor: UIColor? {
get {
return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
} set {
(shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
}
}
}
이행:
UIApplication.statusBarBackgroundColor = .blue
답변
Info.plist에서 View 컨트롤러 기반 상태 표시 줄 모양을 임의의 값으로 정의해야합니다.
YES로 정의하면 각보기 컨트롤러에서 preferredStatusBarStyle 함수를 대체해야합니다.
NO를 정의하면 AppDelegate에서 스타일을 설정할 수 있습니다.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
답변
override func viewWillAppear(animated: Bool) {
self.navigationController?.navigationBarHidden = true
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector("setBackgroundColor:") {
statusBar.backgroundColor = UIColor.redColor()
}
}