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


192
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 의 상태 표시 줄 색상을 어떻게 변경 합니까?

답변:


350

모든 제안 사항을 읽고 몇 가지 사항을 시도한 후 다음 단계를 사용하여 특정 뷰 컨트롤러에서 작동하도록 할 수 있습니다.

첫 번째 단계:

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


4
Status bar is initially hidden = YESinfo.plist 파일에서 설정하면 "컨트롤러 기반 상태 표시 줄 표시 = 아니오"가 표시되어 상태 표시 줄이 숨겨집니다.
xi.lin

13
UIStatusBarStyle.Default사용하여 다시 변경 하는 경우 ...이 아닌 초기화에 viewWillDisappear()사용해야합니다 . viewWillAppear()viewDidLoad()StatusBarStyle
William GP

7
스위프트 3 : UIApplication.shared.statusBarStyle = .lightContent
ibrahimyilmaz 12

4
상태 표시 줄의 색상을 변경하는 방법은 여전히 ​​명확하지 않습니다
DoruChidean

4
iOS 9에서 사용되지 않는 Guys
by Jeeevan

109

(2019 년 9 월 20 일 현재)

스위프트 5 , 스위프트 4.2 , 스위프트 4

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    .lightContent
}

7
super.viewWillAppear이 코드를 복사하여 붙여 넣으 려면 전화하십시오
Stephen Silber

super.viewWillAppear ()를 포함하도록 편집되었습니다. 팁에 대한 @StephenSilber에게 감사합니다!
BennyTheNerd

preferredStatusStyle을 재정의해야합니다. 그렇지 않으면 작동하지 않습니다. 지적 해 주셔서 감사합니다. +1
Alix

3
사용 UIApplication.shared.statusBarStyle = .lightContent[UIViewController에 preferredStatusBarStyle] - 사용 :이 컴파일러 경고에 결과를 'statusBarStyle'에 대한 세터는 아이폰 OS 9.0에서 사용되지 않습니다
airowe

3
응용 프로그램의 Info.plist에서 "컨트롤러 기반 상태 표시 줄보기"를
예로 설정하십시오.

30

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
}

이는 내비게이션 컨트롤러 및 자체 컨트롤러를 사용하여 예상 결과를 얻는 방법입니다. 또한 내 프로젝트에서와 같이 prefersStatusBarHidden을 위해이 방법을 수행 할 수 있습니다 :)
atereshkov

29

나는이 튜토리얼을 따라 갔고 그것은 나를 위해 일했다. 그러나주의 사항이 있는지 확실하지 않습니다.

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


11
각 뷰 컨트롤러에 따라
다릅니다.

4
정확히 이것은 완전한 앱을위한 것이며 문제가 아닙니다.
Anuj

3
iOS 8 Swift 및 xCode 6.1.1을 사용하고 있으며이 두 단계를 수행해도 작동하지 않습니다. 또한 추가해야 UIApplication.sharedApplication().statusBarHidden = falseAppDelegate.swift의 didFinishLauchingWithOptions에
아마드 아민

이것은 전체 응용 프로그램에 대해 설정되었습니다. 특정 뷰 컨트롤러에 대해서는 첫 번째 답변을 참조하십시오. 그것은 나를 위해 일했다.
Akshar Patel

'statusBarStyle'에 대한 Setter는 iOS 9.0에서 더 이상 사용되지 않습니다 : Use-[UIViewController preferredStatusBarStyle]
Oleksandr

22

여기에 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

2
이 접근 방식은 개인 API에 액세스하는 것으로 간주 될 수 있으며 Apple에서 앱이 거부 될 수 있습니다.
JWhitey

또는 적어도 Apple의 구현 세부 사항에 의존하며 iOS의 변경으로 경고없이 중단 될 수 있습니다.
Chris Prince

19

Info.plist에서 View 컨트롤러 기반 상태 표시 줄 모양을 임의의 값으로 정의해야합니다.

YES로 정의하면 각보기 컨트롤러에서 preferredStatusBarStyle 함수를 대체해야합니다.

NO를 정의하면 AppDelegate에서 스타일을 설정할 수 있습니다.

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

7
setStatusBarStyleiOS 9.0에서 더 이상 사용되지 않음
Jeffrey Neo

@Jeffrey_Neo 사실이지만 교체 작업을 수행 할 수는 없습니다. 주석을 작업 코드의 답변으로 보는 것이 유용합니다.
Dumbledad

15
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()
    }

}

사용 valueForKey("statusBar")이 Apple 지침을 준수하지 않을 수 있음
Cœur

15

스위프트 3

let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
  statusBar.backgroundColor = UIColor.black
} 

특정 뷰 컨트롤러에 대한 상태 표시 줄의 배경색을 설정하는 솔루션입니다.


3
UIView는 항상 Swift의 backgroundColor에 응답합니다.
Cœur

13

스위프트 2

viewWillAppear에 다음을 추가하여 상태 표시 줄 배경의 모양을 성공적으로 변경할 수있었습니다.

let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView

    if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
        statusBar.backgroundColor = .redColor()
    }

10

구현 preferredStatusBarStyle당신이 언급하고 전화로 self.setNeedsStatusBarAppearanceUpdate()ViewDidLoad도의 Info.plist 세트 UIViewControllerBasedStatusBarAppearanceYES그건 (YES 기본적으로)

왜 작동하지 않는지 명확하지 않습니다. 코드를 확인해야합니다. 또 다른 제안은 작업 코드를 viewDidLoad UIApplication.sharedApplication().statusBarStyle = .LightContent가져 와서보기가 사라지면 기본값으로 변경하는 것 viewWillDisappear입니다.


대답의 첫 부분을 구현하면 나를 위해 일했습니다. 그러나 Info.plist에 UIViewcontrollerBasedStatusBarAppearance를 추가하지 않았습니다. 여전히 효과가있었습니다.
Akshar Patel

10

신속한 3

.plist

View controller-based status bar appearance = NO

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Custom statubar
        UIApplication.shared.isStatusBarHidden = false
        UIApplication.shared.statusBarStyle = .lightContent
        let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
        statusBar.backgroundColor = UIColor.gray

        return true
    }

1
나는 모든 해결책을 시도했다 ... 이것은 나에게만 효과적이었다! 왜 그런지 모르겠다 : D
Khaled Hayek

무승부 행운
Giang

'isStatusBarHidden'에 대한 Setter는 iOS 9.0에서 더 이상 사용되지 않습니다 : Use-[UIViewController prefersStatusBarHidden] ...
drew ..

9

상황에 따라 스토리 보드를 사용하여 뷰 컨트롤러를 구성하고 모든 상태 표시 줄 스타일을 변경하고 싶습니다.

아래 그림에서 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

Stars보기 컨트롤러는이다 CPBaseNavigationController,하고 CPBaseNavigationController의 서브 클래스UINavigationController .

다음 세트를 해보십시오.

  1. 에서 AppDelegate.swiftFUNC didFinishLaunchingWithOptions추가

    //change status bar color
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    그러나 효과가 없습니다.

  2. StoryBoard에서 Base Tab BarController(위의 그림)을 찾으십시오 .select Attributes Inspector, Sattus Bar속성을 Light Content.so bad, no effect 로 변경하십시오 .

여기에 이미지 설명을 입력하십시오

  1. 내 사용자 지정 탐색 컨트롤러 CPBaseNavigationController에서 func를 추가하십시오.preferredStatusBarStyle

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

    잘 작동한다!

또한 statusBarStyle9.0 에서 더 이상 사용되지 않으므로 사용할 수 있습니다 -[UIViewController preferredStatusBarStyle].


9

내비게이션 기반 응용 프로그램에서 작동

    var addStatusBar = UIView()
    addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
    addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
    self.window?.rootViewController?.view .addSubview(addStatusBar)

이 특정 코드를 추가 할 위치는이 작업을 수행 할 수 없습니다.
Anuj

U는 didFinishLaunchingWithOptions
Jio

1
하드 코딩 된 320 너비 대신 addStatusBar.frame = CGRectMake (0, 0, UIScreen.mainScreen (). bounds.width, 20)을 사용하는 것이 더 좋지 않습니까?
Torsten Ojaperv

편집 @TorstenOjaperv
Jio

swift 3.0으로 어떻게합니까?
YETI

8

Swift 3.0 Xcode 8의 모든 것이 훨씬 쉽습니다.

다음에 App Delegate 파일에서 아래 코드 사용

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

이것을 삽입하십시오 :

UINavigationBar.appearance().barStyle = .black

UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)

1
빨강, 녹색 및 파랑 값의 범위는 0에서 1 사이입니다. 255로 나누지 않으면 작동하지 않습니다.
Makalele

8

스위프트 3

//
//  LoginController.swift
//  Swift 3
//
//  Created by The Crab on 17/01/2017.
//  Copyright © 2017 Paxi Labs. All rights reserved.
//

import UIKit

class LoginController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

7

Swift 4 navigationViewController가 포함되지 않은 특정 ViewController의 경우 ViewController 파일에 추가하십시오.

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

네비게이션 컨트롤러가 내장되어 있다면 어떻게해야합니까?
icekomo

7

이 작업을 수행하는 또 다른 쉬운 방법은 UINavigationController 클래스의 확장을 만드는 것입니다.

최우선 이후 preferredStatusBarStyle:방법 못해 일을 하지 않는 한 우리는 UINavigationController가 클래스의 내부에 그것을 할.

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

4

App Delegate파일의 아래 코드를 사용하여 특정 색상 (RGB 형식)을 설정했습니다 .

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

 UIApplication.sharedApplication().statusBarHidden = false
        UIApplication.sharedApplication().statusBarStyle = .LightContent

        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
            statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
        }

. . .
}

Info.plist파일 에 아래 키를 추가해야 합니다.

부울 값이 NO로 설정된 컨트롤러 기반 상태 표시 줄보기

스크린 샷 1

스크린 샷 2


Siwft 3.0을 사용하는 방법은 무엇입니까?
YETI

4

더 간단한 방법을 제안 할 수 있습니다.

  1. Apple 문서에 표시된 것처럼 viewDidLoad에서 setNeedsStatusBarAppearanceUpdate 를 호출하십시오 .

숨겨진 / 숨겨지지 않은 상태 또는 스타일과 같은 뷰 컨트롤러의 상태 표시 줄 속성이 변경되면이 메소드를 호출하십시오. 애니메이션 블록 내에서이 메서드를 호출하면 나머지 애니메이션 블록과 함께 변경 내용이 애니메이션됩니다.

  1. 선호 하는 유형을 반환 하는 preferredStatusBarStyle을 구현 하십시오.

iOS 10.1에서 저에게 효과적이었습니다.

목표 C

[self setNeedsStatusBarAppearanceUpdate];

-(UIStatusBarStyle)preferredStatusBarStyle {
     return UIStatusBarStyleLightContent;
}

빠른

setNeedsStatusBarAppearanceUpdate()

var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent
}

아무도 이것을 지적하지 않은 것에 놀랐습니다. 어쨌든 즐길 :)


4

나는 이것에 문제가 있었다. 전 세계적으로 상태 표시 줄 색상을 변경하는 것에 대해 기분이 좋지 않았고 다시보기에서 다시 변경하면 허용 된 답변처럼 사라졌습니다. 믿거 나 말거나 preferredStatusBarStyle원하는 뷰 컨트롤러를 재정 의하여이 작업을 수행 할 수 있습니다 . 많은 시간이 지나면 이것이 작동하도록하는 일입니다.

  1. 에서 View 컨트롤러 기반 상태 표시 줄 모양 변경 info.plist 을 YES로 .
  2. 이제 전체 화면보기 컨트롤러가 재정 의하여 상태 표시 줄 스타일을 변경할 수 있습니다. preferredStatusBarStyle .
  3. 설정하지 않고 (전체 화면이 아닌) 모달보기 컨트롤러에서 작동하지 않기 때문에 전체 화면을 지정합니다. modal​Presentation​Captures​Status​Bar​Appearance 합니다.
  4. 또한 예를 들어 내비게이션 컨트롤러와 같이 뷰 컨트롤러가 내장 된 경우 최상위 뷰 컨트롤러에 상태 표시 줄 스타일을 묻습니다. child​View​Controller​For​Status​Bar​Style임베디드 뷰 컨트롤러를 재정의 하고 전달하는 것이 작동해야하지만 나에게는 적합하지 않습니다. 그래서 방금 임베디드 뷰 컨트롤러 기본 상태 표시 줄을 기본 상태 표시 줄 스타일로 반환했습니다. 이 같은:

    override var preferredStatusBarStyle: UIStatusBarStyle {
         if let topViewController = viewControllers.last {
             return topViewController.preferredStatusBarStyle
         }
    
         return .default
    }

이 답변이 도움이되었습니다! 어떤 이유로 내 탐색 컨트롤러 (모달 형식으로 표시됨) 최상위 뷰 컨트롤러에 상태 표시 줄 스타일을 암시 적으로 요구 하지 않는다는 것을 알았습니다 . 그래서 나는 var 를 서브 클래스 화 UINavigationController하고 재정의 해야했습니다 . child​View​Controller​For​Status​Bar​Styleself.topViewController
taber

3

스위프트 4 또는 4.2

당신은 당신의 VC에 추가 할 수 있습니다

preferredStatusBarStyle

반환 값을

.lightContent 또는 .default

전의:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

3

(2020 년 6 월 10 일 현재)

스위프트 5 ( 파일을 편집하지 않고).Plist )

을 사용하는 Storyboard경우으로 이동하여을 NavigationController선택하고을 navigationBar클릭 Attributes Inspector한 다음을 변경하십시오 style. 필요한 경우 light content( 흰색 상태 표시 줄 ) default설정 스타일을 말하고 black원하는 경우 dark content ( 검은 색 상태 표시 줄 ) 설정하십시오.default .

기본값 ( UIBarStyleDefault)은 어두운 전경 UIStatusBarStyleDefault상태 표시 줄이됩니다. 그리고 UIBarStyleBlack줄 것이다UIStatusBarStyleLightContent 상태 표시 줄 합니다.

프로그래밍 방식으로

let nav = UINavigationController(rootViewController: rootViewController)

    nav.navigationBar.barStyle = .default //gives you dark Content status bar

    nav.navigationBar.barStyle = .black  //gives you light content status bar

내비게이션 바 없음 ( 편집.Plist )

UIViewControllerBasedStatusBarAppearance/ View controller-based status bar appearance를 추가 info.plist하고 설정 값은true 입니다.

OverridepreferredStatusBarStyle컨트롤러 의 속성

class ViewController: UIViewController {
    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
}

2

스위프트 3.0 업데이트

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.statusBarStyle = .lightContent

        return true
    }

2

나와 함께 일한 것은 스토리 보드에서 탐색 컨트롤러로 이동하여 탐색 모음을 선택하고 속성 관리자를 클릭 한 다음 스타일을 기본값에서 검은 색으로 변경하십시오. 그게 다야!


2

SWIFT 4.2 이봐, 나는 해결책을 공유하고 싶었다. Graig Grummitt의이 훌륭한 주제에 관한 훌륭한 기사에서 얻은 것입니다.

1 단계 다른 사람들이 귀하의 PLIST에 아래 ADD를 언급했듯이

View controller-based status bar appearance YES

RootViewcontroller의 2 단계 아래에 추가

var statusBarHidden: Bool = false {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }

    var vcStatusBarStyle: UIStatusBarStyle = .default {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return vcStatusbarStyle
    }

두 속성을 업데이트 할 때 statusBarHidden또는 vcStatusBarStyle그것을 호출 setNeedsStatusBarAppearanceUpdate()하고 하나의 새 값으로 상태 표시 줄을 업데이트 prefersStatusBarHidden하거나 preferredStatusBarStyle. 내 상황에서 컨테이너 viewcontroller에 대한 이러한 속성을 업데이트해야했습니다. 이것은 보이는 childviewcontroller의 부모였습니다. 간단한 대리자 방법을 사용 하여이 작업을 수행했습니다.

protocol MainViewControllerDelegate {
    func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
    func toggleStatusBar(visable: Bool)
}

물론 childViewController (Visible VC)를 인스턴스화 할 때 MainViewcontroller (Container VC)를 델리게이트로 설정하는 것을 잊지 마십시오. 가끔 그렇습니다 :)

childViewController.delegate = self

그런 다음 childViewController에서 상태 표시 줄을 업데이트해야 할 때 대리자 메서드를 방금 호출했습니다.

self.delegate?.updateStatusBarStyle(statBarStayle: .default)

위에서 언급했듯이 Graig Grummitt는이 솔루션에 대해 더 자세히 설명하고 UINavigationController 와도 함께 작업합니다. 여기 링크 : 상태 표시 줄의 신비한 사례


1

Supporting Files 그룹 (왼쪽 상단-프로젝트 이름)을 클릭하십시오. 정보로 이동하십시오. 아래 번들 이름과 같이 목록 사이의 +를 클릭하십시오. "컨트롤러 기반 상태 표시 줄보기"를 추가하고 NO로 설정하십시오. 그런 다음 AppDelegate.swift를 열고 다음과 같이 수정하십시오.

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

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

return true
}

그게 다야.


당신은 질문을 잘못 읽었습니다. 전체 응용 프로그램이 아닌 특정 뷰 컨트롤러의 StatusBarStyle을 변경하는 방법에 대해 문의했습니다.
Anuj

@Anuj
theCrab에서

1

Xcode 10의 경우 클래스를 만들고 viewController 클래스 앞에 놓을 수 있습니다. 모든 뷰 컨트롤러 에서이 클래스를 호출하면 간단한 내용 상태 표시 줄이 필요합니다 ...

class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}

이제 viewController 클래스를 다음에서 변경하십시오.

class YourViewController: UIViewControllerWithLightStatusBar {
...
}

그리고 그게 전부입니다...


1

swift4의 특정 뷰 컨트롤러에 대한 탐색 기반 작동

   let app = UIApplication.shared
   let statusBarHeight: CGFloat = app.statusBarFrame.size.height

   let statusbarView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: statusBarHeight))
   statusbarView.backgroundColor = UIColor.red
   view.addSubview(statusbarView)

1

경고


'statusBarStyle'에 대한 Setter는 iOS 9.0에서 더 이상 사용되지 않습니다. 사용-[UIViewController preferredStatusBarStyle]

UIApplication.shared.statusBarStyle = .default

내 솔루션은 다음과 같습니다 : 네비게이션 컨트롤러에서 확장 :

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

        return .default
    }
}

앱의 스타일과 다른 스타일을 가진 viewController가 있다면 이것을 만들 수 있습니다.

var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
    return barStyle
}

앱 상태 스타일이 있고이 .default화면을 .lightContent원한다고 가정하면 barStyle이 .lightContent기본값으로 사용하여 상태 표시 줄 스타일을 lightContent로 viewWillDisappear변경 한 다음 barStyle을 앱 상태 표시 줄 스타일로 다시 변경할 때 확인하십시오. 우리의 경우는 .default입니다.

이것은 나를 위해 작동합니다


1

상태 표시 줄의 사용자 정의 색상 (iOS11 +, Swift4 +)

상태 표시 줄을 사용자 정의 색상으로 변경하는 방법에 대한 해결책을 찾고 있다면 이것이 효과적인 해결책입니다.

let statusBarView = UIView()
view.addSubview(statusBarView)
statusBarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
    statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
    statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
    statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
statusBarView.backgroundColor = .blue
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.