programing

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

nasanasas 2020. 9. 17. 07:59
반응형

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

} 

This will automatically turn your status bar's style to .Lightcontent for all the view controllers inside a UINavigationController.

(Also, delete View controller-based status bar appearance from Info.plist to suppress the warnings you're probably seeing too!)


In Swift 3, status bar style has changed to a computed property in UIViewController that you can override like this:

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

On iOS 9 the following (setStatusBarStyle) is deprecated and you will get a warning if you go that way.

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

If you want all statusBars changed in a single shot try adding the following to your Info.plist. This will also make your launch-screen status bar white. While the code above won't.

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

for me all above dind't work until i add:

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

so:

  1. Set UIViewControllerBasedStatusBarAppearance to YES in .plist
  2. In viewDidLoad call self.setNeedsStatusBarAppearanceUpdate();
  3. Override preferredStatusBarStyle
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. In overrided method i set also the navigationBar.barStyle so final
    for light content:
    override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }
    and for black content use default

The source from here and here.

and if this doesn't work you can try add a UINavigationController extension:

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

        return .default
    }
}

Strange, using Swift 3.1 & XC8.2.1, but all of the above didn't work.

What I did, is just

extension UINavigationController
{
    override open var preferredStatusBarStyle: UIStatusBarStyle {
        get {
            return .lightContent
        }
    }
}

No Plist, no other stuff. HTH


In Swift 3.0 you can override a getter in ViewController for View controller-based status bar appearance:

override var preferredStatusBarStyle: UIStatusBarStyle {
    get { return .lightContent }
}

Don't edit your Info.plist. Add this to your ViewController.swift:

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

Step 1. Add to info.plist View controller-based status bar appearance -> NO

Step 2. Add code in method where you need to change status bar color:

UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()

Key line of code: setNeedsStatusBarAppearanceUpdate()

참고URL : https://stackoverflow.com/questions/24235401/uistatusbarstyle-not-working-in-swift

반응형