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


85

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
}

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

답변:


145

두 가지 옵션이 있습니다.

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

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

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

스위프트 3

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

스위프트 2

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

.. 어떤 도움이 코드를 시도 ...하지만 난 단지 .. 내가 화면 :(의 나머지 부분에 대한 상태 표시 줄을 받고 있지 않다 첫 번째 화면에서 흰색 상태 표시 줄을 얻을?
라훌

7
plist에서 "View controller-based status bar appearance"설정을 YES로 설정해야합니다.
StackUnderflow

1
뷰 컨트롤러 기반 상태 표시 줄 모양을 사용 하려는 경우에만 해당됩니다 .
Sam Holmes

4
iOS 10 (Swift 3.0)에서는 더 이상 방법이 아니라 속성입니다. 참조 : stackoverflow.com/questions/38862208/...
stevo.mit

단지 하나 개의 화면
Oubaida AlQuraan

143

스위프트 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

1
이 : 완벽한 대답이다
제이 마유

1
완벽한 대답입니다. 짧고 달다.
Mehul

3
죄송합니다. 이것은 가장 간단한 대답 일 수 있지만 확실히 최선은 아닙니다.이 스타일을 앱의 모든 viewController에 설정하기 때문입니다. 이 동작은보다 미세한 제어를 가능하게하고 다른 뷰 컨트롤러 (예 : 밝은 내용과 어두운 내용 혼합)에 따라 다른 설정을 적용하기 위해 도입되었습니다.
auco

그것은 기괴합니다-Apple 문서가 말하는 것은 아니지만 작동합니다. UIViewController 기반 상태 표시 줄을 포함하여 여러 가지 다른 방법을 시도했지만 아무것도 작동하지 않았습니다.
n13 2011

33

다음을 설정해야합니다.

navigationController.navigationBar.barStyle = .black

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


1
감사! 이 재정의 func preferredStatusBarStyle ()-> UIStatusBarStyle {return UIStatusBarStyle.LightContent}조차도 도움이되지 않았습니다. 이것은 정말 도움이됩니다. navigationController.navigationBar.barStyle = .BlackTranslucent navigationController.navigationBar.translucent = true
Svitlana

감사! 당신은 내 하루를 구했습니다. 그러나 BlackTranslucent는 더 이상 사용되지 않습니다. 따라서 navigationController.navigationBar.barStyle = .Black
hsusmita를

.NET과 완벽하게 작동합니다 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }. 이 줄을 viewDidLoad잘 작성하면됩니다 . View controller-based status bar appearance = YES이 솔루션을 유지하십시오 .
Bhavin_m jul.

> UIStatusBarStyleLightContent 2.보기 컨트롤러 기반 상태 표시 줄 모양 - -> NO 1. 상태 표시 줄 스타일 : 그냥 시도의 Info.plist 파일에서이 같은 일을 ... 잔인한 것 같아
raistlin

21

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 에서 삭제 하여 아마도 표시되는 경고를 억제하십시오!)


감사합니다. iOS9에 심각한 버그가있는 것 같습니다. 이것이 초기 VC에서 상태 표시 줄을 흰색으로 바꿀 수있는 유일한 방법이었습니다. 나는 모든 것을 시도했다. 레이더를 제출하겠습니다.
1b0t 2015 년

preferredStatusBarStyle이 UIStatusBarStyleDefault를 반환하지만 특정 viewcontroller에 대해 lightcontent를 darkcontent로 업데이트하지 않습니다. self.navigationController.navigationBar.barStyle = UIBarStyleDefault; viewWillAppear에서 나를 위해 일했습니다. 이 의견이 다른 사람들에게 도움이되기를 바랍니다.
Pandey_Laxman

UIStatusBarStyle이 Swift 3에서 ".black"(소문자 B)로 변경되었습니다
brycejl

16

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

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

13

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

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

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

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

.plist 접근 방식은 정확하지만 setStatusBarStyle ()은 필요하지 않습니다. 'setStatusBarStyle (_ : animated :)'은 iOS 9.0에서 더 이상 사용되지 않습니다.-[UIViewController preferredStatusBarStyle] 사용
Bill Chan

@BillChan 의견을 보내 주셔서 감사하지만 답변 이득을 읽으십시오. 이미 'setStatusBarStyle'이 더 이상 사용되지 않는다고 설명했습니다. 하나 또는 다른 viewController를 변경하려면 preferredStatusBarStyle을 사용해야합니다. plist 접근 방식은 한 번에 모든 viewController를 변경하려는 사용자를위한 것입니다. 여기에는 옳고 그름이 없습니다. 당신이 달성해야 할 문제입니다.
GuiSoySauce 2016-08-06

1
UIStatusBarStyle = UIStatusBarStyleLightContent (.plist에 있음)가 흰색 상태 표시 줄 텍스트로 앱을 시작하는 데 도움이되었습니다. 감사합니다 !!!
Chris Allinson 2017 년

10

위의 모든 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
    }
}

1
내비게이션 바 스타일에 대한 의견은 없지만 Swift 3, Xcode 8에서는 이것이 저에게 도움이 된 유일한 솔루션이었습니다.
Despotovic 16.

단지 내가 모든 단계가 변화한다는 것입니다 발견하지만, 애니메이션없이 한 환급
루카스 'Severiaan'Grela

6

이상하게도 Swift 3.1 및 XC8.2.1을 사용했지만 위의 모든 기능이 작동하지 않았습니다.

내가 한 일은

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

Plist도없고 다른 것도 없습니다. HTH


Swift 4.2에서도 작동합니다.
zeeshan

2

Swift 3.0에서는 View 컨트롤러 기반 상태 표시 줄 모양을 위해 ViewController의 getter를 재정의 할 수 있습니다.

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

1

Info.plist를 편집하지 마십시오. 이것을 ViewController.swift에 추가하세요 :

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

1

1 단계. info.plist에 추가 View controller-based status bar appearance -> NO

2 단계. 상태 표시 줄 색상을 변경해야하는 메서드에 코드를 추가합니다.

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

주요 코드 라인 : setNeedsStatusBarAppearanceUpdate()

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.