ios - 상태 - view controller based status bar appearance




스위프트 3의 상태 표시 줄 배경색 변경 (8)

"변경"상태 표시 줄 배경 색상 :

let statusBarView = UIView(frame: UIApplication.shared.statusBarFrame)
let statusBarColor = UIColor(red: 32/255, green: 149/255, blue: 215/255, alpha: 1.0)
statusBarView.backgroundColor = statusBarColor
view.addSubview(statusBarView)

상태 표시 줄 텍스트 색상 변경 :

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

업데이트 : 보기를 돌릴 때 상태 표시 줄 프레임이 변경됩니다. 다음과 같이 작성된 서브뷰 프레임을 갱신 할 수 있습니다.

  • 자동 크기 조정 마스크 사용 : statusBarView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
  • NSNotification.Name.UIApplicationWillChangeStatusBarOrientation 준수
  • 또는 viewWillLayoutSubviews() 재정의합니다.

XCode 7.3.x에서 StatusBar의 배경색을 다음과 같이 변경했습니다.

func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}

그러나 이것이 Swift 3.0에서 더 이상 작동하지 않는 것 같습니다.

시도한 불행 :

func setStatusBarBackgroundColor(color: UIColor) {
guard  let statusBar = (UIApplication.shared.value(forKey: "statusBarWindow") as AnyObject).value(forKey: "statusBar") as? UIView else {
    return
}
statusBar.backgroundColor = color
}

그러나 그것은 나에게 준다 :

this class is not key value coding-compliant for the key statusBar.

어떤 아이디어 XCode8 / Swift 3.0으로 그것을 변경하는 방법?


Swift 4+ 및 iOS 13+에 대한 적절한 해결책

if #available(iOS 13.0, *) {
    let navBarAppearance = UINavigationBarAppearance()
    navBarAppearance.configureWithOpaqueBackground()
    navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
    navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
    navBarAppearance.backgroundColor = UIColor.Theme.primary
    navigationBar.standardAppearance = navBarAppearance
    navigationBar.scrollEdgeAppearance = navBarAppearance
}


응용 프로그램 실행 중 또는보기 컨트롤러의 viewDidLoad 중에 상태 표시 줄의 배경색을 설정할 수 있습니다.

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}


or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }

}



결과는 다음과 같습니다.


확장 파일에 다음 코드를 추가하여 신속하게 상태 표시 줄을 4 이상으로 편집하십시오.

extension UIApplication {
    var statusBarView: UIView? {
        if responds(to: Selector(("statusBar"))) {
            return value(forKey: "statusBar") as? UIView
        }
        return nil
    }
}

이제 ViewController 클래스에 다음 줄을 추가하여 상태 표시 줄을 편집 할 수 있습니다.

UIApplication.shared.statusBarView?.backgroundColor = <Your Color name>

ex: UIApplication.shared.statusBarView?.backgroundColor = .red

희망, 이것이 도움이 될 것입니다. 감사


Xcode 9 및 iOS 11의 경우 : 우리가 달성하고자하는 상태 표시 줄의 스타일은 흰색 콘텐츠가있는 상태 표시 줄입니다. ViewController.swift 파일로 이동하여 다음 코드 행을 추가하십시오.

override var preferredStatusBarStyle: UIStatusBarStyle {

     return .lightContent

}

또는 프로젝트 설정 옵션에서 상태 표시 줄의 스타일을 변경할 수 있습니다.

그런 다음 스토리 보드로 돌아가보기 컨트롤러를 선택하고 편집기 메뉴에서 탐색 컨트롤러에 소스 추가를 선택하십시오. 탐색 막대를 선택하고 속성 검사에서 막대 색상을 빨간색으로 설정하십시오. 스토리 보드는 다음과 같습니다.

프로젝트 빌드 및 실행 상태 표시 줄의 내용이 다시 어두워지며 이것이 기본값입니다. 그 이유는 iOS가 포함 된보기 컨트롤러 대신 탐색 컨트롤러의 상태 표시 줄 스타일을 묻기 때문입니다.

App 내 모든 내비게이션 컨트롤러의 스타일을 변경하려면 AppDelegate.swift 파일에서 다음 메소드를 변경하십시오.

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

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

빌드하고 프로젝트를 다시 실행하십시오. 이번에는 상태 표시 줄의 내용이 흰색으로 변경됩니다.


iOS 11 및 Xcode 9의 경우 다음 단계를 사용하십시오.

  1. UIApplication 클래스에 대한 확장을 작성하십시오.

    extension UIApplication { var statusBarView: UIView? { return value(forKey: "statusBar") as? UIView } }

  2. 클래스 또는 상태 표시 줄의 배경색을 변경하려는 위치 :

    UIApplication.shared.statusBarView?.backgroundColor = .red

  3. 상태 표시 줄의 가벼운 내용이나 어두운 내용의 경우 Info.plist 로 가서 값 NO 인 다음 값 행을 추가하십시오.

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

  1. 이제 가벼운 내용이나 프로젝트 설정 일반 탭 에서 필요한 항목 만 설정하면됩니다.

extension UIApplication {
    var statusBarView: UIView? {
        if responds(to: Selector("statusBar")) {
            return value(forKey: "statusBar") as? UIView
        }
        return nil
    }
}

UIApplication.shared.statusBarView?.backgroundColor = .red

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

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

내 탐색 barTintColor가 검정색이어서 상태 표시 줄을 볼 수 없어이 기능이 저에게 효과적입니다.

위의 코드를 설정하면 완료 표시 줄 상태 표시 줄이 흰색으로 표시됩니다.





uistatusbar