[swift] iOS8에서 Swift를 사용하여 특정 ViewController의 상태 표시 줄 색상 변경

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를 열고 “라는 이름의 새 키 삽입 보기 컨트롤러 기반 상태 표시 줄의 모양을 “나 UIViewControllerBasedStatusBarAppearanceYES 각 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()
    }

}