sourcecode

Swift 3에서 상태 표시줄 스타일을 설정하는 방법

copyscript 2023. 4. 19. 23:24
반응형

Swift 3에서 상태 표시줄 스타일을 설정하는 방법

Xcode 8.0 베타 4를 사용하고 있습니다.

이전 버전에서는 UIViewController가 상태 표시줄 스타일을 설정하는 방법을 사용했습니다.

public func preferredStatusBarStyle() -> UIStatusBarStyle

그러나 Swift 3에서 "Get ONLY varaiable"로 변경된 것을 발견했습니다.

public var preferredStatusBarStyle: UIStatusBarStyle { get } 

UIView Controller에서 사용할 스타일을 제공하려면 어떻게 해야 합니까?

[Updateed] Xcode 10+ & Swift 4.2+의 경우

iOS 7 이상에서는 이 방법을 사용하는 것이 좋습니다.

의 ★★★★★★★★★★★★★★★★★★★★★★★★★.Info.plist , set , syslogsView controller-based status bar appearance로로 합니다.YES.

「」를 .preferredStatusBarStyle(Apple docs)를 각 뷰 컨트롤러에 표시합니다.예를 들어 다음과 같습니다.

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

「 」가 preferredStatusBarStyle에 근거해 를 들면,).이 경우, 「」를 호출합니다( 「」는 「」로 합니다).setNeedsStatusBarAppearanceUpdate()그 상태가 바뀌면요.

버전 7 이전의 iOS, 권장되지 않는 방법

애플은 이를 폐지했기 때문에 향후 삭제될 예정이다.다음 iOS 버전이 출시될 때 다시 쓸 필요가 없도록 위의 방법을 사용하십시오.

In을 Info.plist , set , syslogsView controller-based status bar appearance로로 합니다.NO.

»appDelegate.swift , . . . . . . . .didFinishLaunchingWithOptions 명령어, 명령어:

UIApplication.shared.statusBarStyle = .lightContent

내비게이션 컨트롤러용

각 뷰 , 를 설정합니다.View controller-based status bar appearance로로 합니다.YES★★★★★★★★★★★★★로info.plist

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

최신 업데이트(X코드 10+/Swift 4.2+)

이 기사는 지난 몇 년간 존재했던 다양한 접근 방식의 논리를 이해하고자 하는 모든 사람을 위해 그대로 남겨져 있습니다.한편, Xcode 10에서는 Swift 4.2 first 어프로치는 폐지되어 더 이상 지원되지 않습니다(즉, 채용하려고 해도 유효하게 되지 않습니다).이면에 있는 이유를 더 잘 이해하기 위해 정보를 참조할 수 있습니다.Plist.info플래그를 지정하고 커스터마이즈 작업을 수행합니다.

중요한 설명

상태 표시줄 모양을 사용자 정의하는 두 가지 방법을 이해하는 것이 매우 중요합니다.그것들은 다르므로 섞으면 안 된다.

첫 번째 접근법– 앱 전체에 대해 한 가지 색상 사용 (iOS7 이후 폐지)

info.plist에서 다음과 같은 키를 찾거나 만듭니다.

View controller-based status bar appearance

NO로 설정합니다.

그게 뭘 하는데?기본적으로 응용 프로그램에서 상태 표시줄 모양은 각 뷰 컨트롤러에 의해 개별적으로 정의되지 않는다는 설정이 설정됩니다.이것은 이해하는 것이 매우 중요하다.즉, 앱 전체와 모든 화면에 대해 동일한 설정을 할 수 있습니다.다음의 2개의 설정이 있습니다.default바탕에 텍스트가 됨) 또는 ('백색 바탕에 검은색 됨)lightContent이치노

다음 중 하나를 설정하려면(모든 화면에 대해가지 설정)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent // .default
    return true
}

이렇게 하면 각 뷰 컨트롤러에서 이 설정을 다시 설정할 필요가 없습니다.그러나 언제든지 이 방법을 사용하여 자발적으로 모양을 변경할 수 있습니다.

두 번째 접근법– 각 뷰 컨트롤러의 개별 색상

이것은 정반대입니다.동작시키려면 info.plist로 이동하여

View controller-based status bar appearance

YES로

같이 마다 이 을 각 뷰컨트롤러에 됩니다.UIViewController다음 중 하나:

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

처음과 동일하게 상태 표시줄의 어두운 스타일 또는 밝은 스타일을 각 뷰 컨트롤러에 개별적으로 설정합니다.

이 속성은 다음 두 가지 시나리오에서 UIKit에 의해 가져옵니다.

  1. 화면 초기화 시 UI 준비 중.
  2. 「」를 setNeedsStatusBarAppearanceUpdate()암호에 입력되어 있습니다.

후자의 경우 상태 표시줄 모양을 다음 코드로 조작할 수 있습니다.

var isDark = false {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return isDark ? .lightContent : .default
}

func toggleAppearance() {
   isDark.toggle()
}

toggleAppearance()상태 표시줄 스타일 변경이 트리거됩니다.

세 번째 접근법– Hack!

상태 표시줄에 직접 액세스할 수 있는 해킹이 있습니다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.backgroundColor = UIColor.blue
    }
    
    return true
}

상태 표시줄의 색상이 검은색이나 흰색 이외의 색상이 필요한 경우 문서화되지 않은 API를 사용합니다.얻을 수 있다statusBarKVC를 사용하여 오브젝트를 설정하고 배경색을 설정합니다. 수 있는 오브젝트는 '이렇게' 입니다.UIStatusBar을 따온 말입니다.UIView스럽게 지지하게 됩니다.backgroundColor, 입니다(이것은 고려되지 않습니다).UINavigationBarnavbar+ 커스터마이즈 할 수 ).navbar+statusbar의 어피아란스를 커스터마이즈 할 수 있습니다.앱이 거부될 수 있습니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★또한 특정 복잡한 상황(네스트된 컨트롤러, 하위 탐색 컨트롤러 및 뷰 컨트롤러 계층 등)에서는 이 방법이 상태 표시줄 모양을 커스터마이즈하는 거의 유일한 방법일 수 있습니다(투명하게 하는 방법 등).

Xcode 10+, Swift 4.2

다른 방법은 없습니다.개발자는 플래그를 YES로 설정하고(또는 디폴트로 YES이므로 이 액션을 생략하고) 위의 지시에 따라 각 뷰 컨트롤러가 상태 표시줄 모양을 정의할 있도록 해야 합니다.


보너스

모든 단계에서 상태 표시줄 모양을 자발적으로 변경하기 위해 복잡한 상황에서 사용할 수 있는 해킹 기반 솔루션(권장되지는 않지만).색상 면에서는 다음 확장 방법을 사용하면 일반 접근 방식과 동일하게 수행할 수 있습니다.필요에 따라 조정할 수 있습니다.

extension UIViewController {
    func setStatusBarStyle(_ style: UIStatusBarStyle) {
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
            statusBar.backgroundColor = style == .lightContent ? UIColor.black : .white
            statusBar.setValue(style == .lightContent ? UIColor.white : .black, forKey: "foregroundColor")
        }
    }
}

반환된 값을 설정하지 않고 덮어쓸 수 있습니다.메서드가 {get}으로 선언되었으므로 getter를 제공하십시오.

 override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

조건부로 설정했을 「」에 전화할 .setNeedsStatusBarAppearanceUpdate()가 되면 있게

3 & &9 & 10 Swift 3 & 4, iOS 10 & 11, Xcode 9 & 10
나에게는 이 방법이 효과가 없다.

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

각 뷰 컨트롤러에 사용했을 때는, 다음과 같이 동작했습니다.

  • info"info.list" 행을 합니다.View controller-based status bar appearance and and로 NO

  • 다음 대리점:

    UIApplication.shared.statusBarStyle = .lightContent
    

X코드 10 이후

Swift 5에서 테스트 완료

코드는 필요 없습니다.다음 절차를 따릅니다.

전체 앱에서 상태 표시줄을 변경하고 싶은 경우.

  1. 프로젝트 탐색기(왼쪽 패널)에서 프로젝트를 선택합니다.
  2. 대상을선택하십시오.
  3. [ General ]탭을 선택합니다.
  4. 배포 정보를 찾습니다.
  5. 상태 표시줄 스타일을 Light로 변경(어두운 배경의 경우 "Light", Light 배경의 경우 "Default")

info.plist 변경 사항 잊지 마세요

  1. [ Select Info ]탭
  2. 이 키를 목록 파일에 추가합니다. "컨트롤러 기반 상태 표시줄 모양 보기" = 아니요

프로젝트를 실행하고 확인합니다.

Swift 5 및 Xcode 10.2 및 11.0의 프로젝트

statusBar에, 의 색상에서 흰색으로UINavigationController을 inside 에 합니다.AppDelegate:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

다음 코드:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

에는 효과가 없다UIViewControllers에에 a a in 되어 있다UINavigationController는 ""를 statusBarStyleUINavigationController 아니다.statusBarStyleViewControllers그 안에 들어있어요.

이것이 받아들여진 답변으로 성공하지 못한 사람들에게 도움이 되기를 바랍니다!

보기가 나타난 후 언제든지 상태 표시줄 스타일을 변경하려면 다음을 사용할 수 있습니다.

  • 파일 info.list add row :컨트롤러 기반 상태 바의 외관을 표시하고 YES로 설정합니다.

    var viewIsDark = Bool()
    
    func makeViewDark() {
    
        viewIsDark = true
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func makeViewLight() {
    
        viewIsDark = false
        setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
    
        if viewIsDark {
            return .lightContent 
        } else {
            return .default 
        } 
    }
    

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

View controller-based status bar appearance 부울값을 로 설정하고

applegate didFinishLaunchingWithOptions반품 전 방법

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

backgroundColor ★★★★★★★★★★★★★★★★★」statusBarStyle필요에 따라서

스토리보드에서도 할 수 있습니다.

  1. info에 새 엔트리를 만듭니다.plist "View controller-based status bar apasure"에서 "YES"로 설정합니다.
  2. 스토리보드로 이동한 다음 변경할 네비게이션 컨트롤러를 선택합니다.Storyboard 문서 개요 섹션(Storyboard의 왼쪽 패널)에서 네비게이션 바를 클릭합니다.
  3. 오른쪽 패널로 이동하여 속성 섹션을 클릭합니다.
  4. 탐색 모음 섹션 아래에 스타일이 표시됩니다.원하는 스타일을 선택합니다(기본값은 검은색, 검은색은 흰색).

가지고 있는 각 내비게이션컨트롤러에 대해 이 작업을 수행해야 합니다.그러나 이 탐색 컨트롤러 아래의 보기는 모든 보기 상태 표시줄 스타일/색상을 방금 선택한 것으로 변경합니다.이 옵션은 결과를 즉시 볼 수 있고 모든 뷰 컨트롤러에 추가 코드를 추가할 필요가 없기 때문에 더 좋습니다.

여기에 이미지 설명 입력

(모든 Swift 프로젝트에서 Xcode 8.3.3으로 완료)

iOS 11의 모든 뷰 컨트롤러의 상태 표시줄을 변경하고 싶은 사용자에게 Swfit 4/5 솔루션은 매우 간단합니다.

1) Info.plist 추가:

컨트롤러 기반 상태 표시줄 표시 -> NO

2) XCode select project 왼쪽 > Targets > Select your project > Select General > Deployment Info > Select Status Bar Style : Light

하나의 컨트롤러에 대해서만 상태 표시줄을 변경하려면 viewDidLoad에서 다음을 추가합니다.

2.1) Info.plist

컨트롤러 기반 상태 표시줄 표시 -> YES

2.2)

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

App Delegate에서 목표 C(또는 원어민 반응) 변경:

1) Info.plist 추가:

컨트롤러 기반 상태 표시줄 표시 -> NO

2) AppDelegate -> didFinishLaunching WithOptions

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDarkContent animated:YES];

상태 표시줄을 변경하면 푸시(네비게이션 컨트롤러)를 수행하려고 시도하지 않고 모듈식 뷰 컨트롤러를 표시할 때만 작동합니다.

스위프트 5

PRAVEEN의 답변에 대한 자세한 내용은 https://stackoverflow.com/a/40066798/2082851,에서 설명하겠습니다.각 컨트롤러의 상태 표시줄을 유연하게 커스터마이즈할 수 있습니다.

으로 말하면, 「」, 「」를 합니다.BaseViewController처리하다statusBarStyle★★★★★★★★★★★★★★★★★★★★★★★★★★★★★새 컨트롤러를 생성할 때 이 기본 컨트롤러의 하위 클래스로 만드십시오.

상태 모양을 변경하려면 이 속성만 업데이트하면 됩니다.상태 표시줄 스타일이 즉시 업데이트됩니다.

실행

class BaseViewController: UIViewController {

    var statusBarStyle: UIStatusBarStyle = .default {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return statusBarStyle
    }
}

데모

class ViewController: BaseViewController, UIScrollViewDelegate {

    let scrollView = UIScrollView()
    ... 
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        UIView.animate(withDuration: 0.3) {
            if scrollView.contentOffset.y > 30 {
                self.statusBarStyle = .darkContent
            } else {
                self.statusBarStyle = .lightContent
            }
        }
    }
}

여기에 이미지 설명 입력

2. UINavigationController

★★★의 UINavigationController이는 특수한 경우이며, 다음 중 하나의 해결 방법을 따를 수 있습니다.

솔루션 A: 메시지 디스패치로 덮어쓰기

는 UINavigation Controller이기 때문에 UINavigation Controller는 UINavigation Controller입니다.NSObject.ObjectiveC, 그 메서드는 다음과 같습니다.message dispatch덮어쓸 수 있습니다.

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

B: B: 작성UINavigationController

이 이미 UINavigationController(통상은, 보다 많은 요건을 관리할 필요가 있습니다), 이것이 고객에게 최적인 솔루션입니다.

final class NavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return topViewController?.preferredStatusBarStyle ?? super.preferredStatusBarStyle
    }
}

번째 는 '키'가 해야 합니다.View controller-based status bar appearance 값 " " "NO로로 합니다.Info.plistfile.그 컨트롤러가 영향을 주는 것은 2가지입니다.

override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       UIApplication.shared.statusBarStyle = .lightContent
}

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        UIApplication.shared.statusBarStyle = .default    
}
  1. 경량여기에 이미지 설명 입력 콘텐츠 선택

  2. View 컨트롤러 기반 상태 표시줄 모양 추가(아니오).plist 여기에 이미지 설명 입력

네비게이션 바를 다룰 때 상태 바의 텍스트 색상과 관련하여 약간의 문제가 있는 것 같습니다.

를 .plist로 로 설정합니다.YES컬러 네비게이션 바를 사용하면 작동하지 않을 수 있습니다.

예를 들어 다음과 같습니다.

override func viewWillAppear(_ animated: Bool) {
    let nav = self.navigationController?.navigationBar
    nav?.barTintColor = .red
    nav?.tintColor = .white
    nav?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    setNeedsStatusBarAppearanceUpdate()
}

그리고.

override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}

AppDelegate에서 다음을 설정해도 위의 코드가 작동하지 않습니다.

UIApplication.shared.statusBarStyle = .lightContent

아직 어려움을 겪고 있는 사람에게는 상태 표시줄이 밝은지 어두운지 여부를 내비게이션 바의 스타일로 판단할 수 있는 것 같습니다.그래서 viewWillAppear에 다음 행을 추가하여 이 문제를 해결할 수 있었습니다.

nav?.barStyle = UIBarStyle.black

막대 스타일이 검은색이면 재정의된 변수를 수신합니다.이것이 누군가에게 도움이 되기를 바랍니다:)

Xcode 8.3.1, Swift 3.1

  1. info에 새 엔트리를 만듭니다.plist "View controller-based status bar apaurance"에서 "NO"로 설정합니다.

  2. AppDelegate.swift를 열고 FinishLaunchingWithOptions 메서드로 다음 행을 추가합니다.

application.statusBarStyle = .lightContent

스위프트 3

Info에서 " bar"라는하고 값을 .plist " controller-based status bar apasure"로 합니다.No.

class YourViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

    }

}

@Krunal https://stackoverflow.com/a/49552326/4697535에 의한 great asnower에 추가하려면

in a a a a 를 사용하고 있는 UINavigationController , . . . . . . . .preferredStatusBarStyle will will will will 、 will will 。UIViewController

X코드 10과 스위프트 4

을 설정합니다.UINavigationController

예:

class LightNavigationController: UINavigationController {

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

앱 레벨 솔루션에 확장 기능 사용:

extension UINavigationController {

  open override var preferredStatusBarStyle: UIStatusBarStyle {
      guard let index = tabBarController?.selectedIndex else { return .default }
      switch index {
      case 0, 1, 2: return .lightContent // set lightContent for tabs 0-2
      default: return .default // set dark for tab 3
      }
  }
}

스위프트 4 이상

흰색 상태 표시줄 텍스트:

navigationController.navigationBar.barStyle = .blackTranslucent

다음은 상태 표시줄 스타일 변경에 대한 Apple 지침/지침입니다.

스타일을 설정하는 은 '어플리케이션레벨'을 설정합니다.UIViewControllerBasedStatusBarAppearance로로 합니다.NO 안에서.plist의 파일. 그리고 당신의appdelegatedidFinishLaunchingWithOptions다음 명령을 추가합니다(프로그램적으로 앱 위임자로부터 할 수 있습니다).

목표 C

[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

재빠르다

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

상태 표시줄 스타일을 설정하려면 뷰 컨트롤러 수준에서 다음 단계를 수행합니다.

  1. 를 합니다.UIViewControllerBasedStatusBarAppearance로로 합니다.YES .plist파일, UVINSIE 컨트롤러 레벨에서 상태 표시줄 스타일을 설정해야 합니다.파일(UIViewController 수준에서만 상태 표시줄 스타일을 설정해야 하는 경우)
  2. In the viewDidLoad add function - viewDidLoad 추가 함수 -setNeedsStatusBarAppearanceUpdate

  3. 뷰 컨트롤러에서 preferredStatusBarStyle을 덮어씁니다.

목표 C

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

재빠르다

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

상태 표시줄 스타일 설정 수준에 따라 .plist의 값을 설정합니다.

여기에 이미지 설명 입력

Swift 4.0 "Finish Launching With Options launch Options:" Appdelegate 클래스에서 이 코드를 사용하십시오.

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

iOS 11.2

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UINavigationBar.appearance().barStyle = .black

    return true
}

모달 프레젠테이션을 사용하는 경우 다음을 설정해야 합니다.

viewController.modalPresentationCapturesStatusBarAppearance = true

이건 내게 효과가 있었다.

트 세 set)View controller-based status barplist에서 NO로 나타나다UIViewController viewDidAppear just added the following line 다음 행을 추가했을 뿐입니다.

UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)

스위프트 3

Info.plist에서 컨트롤러 기반 상태 표시줄 표시 = YES인 경우

모든 Navigation Controller에 대해 이 확장을 사용합니다.

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

UINavigationController가 없고 UIViewController만 있는 경우 다음 코드를 사용합니다.

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

저도 이렇게 열심히 하고 있었는데, 것 문 도 시 해 는 은 정 러 를 세, i 모 요 this was tooling to strugg if you are제 full with까 present.modalPresentationStyle as ~하듯이.fullscreen and then, on your presenting view controller, just override 그리고 프레젠테이션 뷰 컨트롤러에서는.preferredStatusBarStyle로로 합니다..lightContent.

그래서:

let navigationController = UINavigationController(rootViewController: viewController)
navigationController.modalPresentationStyle = .fullScreen // <=== make sure to set navigation modal presentation style
present(navigationController, animated: true, completion: nil)

사용자 정의 뷰 컨트롤러에서 상태 표시줄 스타일을 재정의합니다.

    override var preferredStatusBarStyle: UIStatusBarStyle {
        .lightContent
    }

"shouldStatusBarDark"라는 Bool 속성을 사용하여 상태 표시줄 색상을 전환할 수 있습니다.또한 스크롤할 때 해당 값을 업데이트하여 상태 표시줄 색상을 변경할 수도 있습니다.

 var shouldStatusBarDark = false {
     didSet {
         setNeedsStatusBarAppearanceUpdate()
     }
 }

 override var preferredStatusBarStyle: UIStatusBarStyle {
     return shouldStatusBarDark ? .default : .lightContent
 }

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
     let offSetY = scrollView.contentOffset.y
     if offSetY > 50 {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 1
             self.shouldStatusBarDark = true
         })
     } else {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 0
             self.shouldStatusBarDark = false
         })
     }
 }

이 답변의 대부분은 재해시된 것이지만 어두운 배경을 사용할 때 실제로 부팅 화면을 나타내는 답변은 없습니다.

는 이 과 같이 했다.info.plist가벼운 스타일의 상태 표시줄이 생성되었습니다.

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

경고가 표시되는 경우:iOS 9.0에서는 'statusBarStyle'에 대한 설정기가 더 이상 사용되지 않습니다. (UIViewController preferredStatusBarStyle)을 사용한 후 상태 표시줄을 light 또는 dark로 설정하려면 다음 코드를 사용하십시오.

//To set the status bar to white
self.navigationController?.navigationBar.barStyle = .black //or .blackTranslucent

//To set the status bar to black
self.navigationController?.navigationBar.barStyle = .default

이렇게 해도 navbar가 변경되지 않고 단순히 스타일을 나타내므로 상태 표시줄이 그에 따라 변경됩니다.

NB. info.plist를 설정해야 합니다.

View controller-based status bar appearance to YES

에서는 iOS 13을 사용할 수 ..darkContent UIStatusBarStyle status status bar를 표시합니다.

여전히 메서드에서 상태 표시줄 스타일 기준을 변경할 수 없는 경우

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

다음 방법을 사용해 보십시오.

override viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.barStyle = .black
}

언급URL : https://stackoverflow.com/questions/38740648/how-to-set-status-bar-style-in-swift-3

반응형