[ios] UIStatusBarStyle이 Swift에서 작동하지 않습니다.

Swift 앱의 상태 표시 줄 색상을 흰색으로 변경하려고하는데 벽돌 벽에 부딪 혔습니다. NavigationController에 각각 포함 된 3 개의 ViewController가 있습니다 (문제가 될 수 있습니까? 이미 NavigationController 클래스에 코드를 배치하려고했습니다.) AppDelegate의 didFinishLaunchingWithOptions에서 다음 코드를 모두 시도했습니다. .swift 파일이지만 둘 다 작동하지 않았습니다.

application.statusBarStyle = .LightContent

UIApplication.sharedApplication().statusBarStyle = .LightContent

문서가 그것에 대해 말해야 할 것은 UIBarButtonStyle이 Int이며 암시 적으로 전혀 도움이되지 않은이 열거 형 스 니펫을 제공했다는 것입니다.

enum UIStatusBarStyle : Int {
    case Default
    case LightContent
    case BlackOpaque
}

내가 무엇을 놓치고 있습니까?



답변

두 가지 옵션이 있습니다.

상태 표시 줄의 스타일을 계속 수동으로 설정하려면 수행중인 작업을 계속하되 값이 .plist 파일 인 다음 키를 info.plist 파일에 추가해야합니다 NO.

컨트롤러 기반 상태 표시 줄 모양보기

또는 애플리케이션의 statusBarStyle을 설정하는 대신보기 컨트롤러 기반 상태 표시 줄 모양을 계속 사용하려면 preferredStatusBarStyle상태 표시 줄 스타일을 지정하려는 각보기 컨트롤러 의 속성을 재정의합니다 .

스위프트 3

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

스위프트 2

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


답변

스위프트 3.0

AppDelegate.swift에서 didFinishLaunchingWithOptions

UIApplication.shared.statusBarStyle = .lightContent

Info.plist

View controller-based status bar appearance -> NO

스위프트 2.2

AppDelegate.swift에서 didFinishLaunchingWithOptions

UIApplication.sharedApplication().statusBarStyle = .LightContent

Info.plist

View controller-based status bar appearance -> NO


답변

다음을 설정해야합니다.

navigationController.navigationBar.barStyle = .black

텍스트는 흰색으로 표시됩니다.


답변

iOS9.x 및 Xcode7의 경우 다음 안에 넣으십시오 AppDelegate.swift.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().barStyle = .Black

}

그러면 .LightcontentUINavigationController 내부의 모든 뷰 컨트롤러 에 대해 상태 표시 줄의 스타일이 자동으로 바뀝니다 .

(또한 View controller-based status bar appearanceInfo.plist 에서 삭제 하여 아마도 표시되는 경고를 억제하십시오!)


답변

Swift 3에서 상태 표시 줄 스타일은 다음과 같이 재정의 할 수있는 UIViewController의 계산 된 속성으로 변경되었습니다.

override var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent //or default
}


답변

iOS 9에서는 다음 (setStatusBarStyle)이 더 이상 사용되지 않으며 그렇게하면 경고가 표시됩니다.

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

한 번에 모든 statusBar를 변경하려면 Info.plist에 다음을 추가해보십시오. 그러면 시작 화면 상태 표시 줄도 흰색으로 바뀝니다. 위의 코드는 그렇지 않습니다.

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>


답변

위의 모든 dind는 내가 추가 할 때까지 작동하지 않습니다.

self.navigationController?.navigationBar.barStyle = .black;

그래서:

  1. 설정 UIViewControllerBasedStatusBarAppearanceYES.plist
  2. 에서 viewDidLoad호출self.setNeedsStatusBarAppearanceUpdate();
  3. preferredStatusBarStyle 재정의

    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    }
  4. 재정의 된 방법에서 나는 가벼운 내용에 대해 navigationBar.barStyle최종적으로
    설정 했습니다. 검은 내용의 경우 기본값을 사용하십시오.

    override var preferredStatusBarStyle: UIStatusBarStyle {
    self.navigationController?.navigationBar.barStyle = .black;//or default
    return .lightContent //or default
    }


여기여기 에서 소스 .

이것이 작동하지 않으면 다음을 추가 할 수 있습니다 UINavigationController extension.

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
        if let lastVC = self.viewControllers.last
        {
            return lastVC.preferredStatusBarStyle
        }

        return .default
    }
}