iOS8에서 Swift를 사용하여 특정 ViewController의 상태 표시줄 색상 변경
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
ViewController에서 위의 코드를 사용하여 특정 ViewController의 상태 표시줄 색상을 흰색으로 설정하는 것은 iOS8에서 작동하지 않습니다.좋은 의견이라도 있나?UIApplication 사용shared Application 메서드는 전체 앱의 Info.plist에서 필요한 변경 후 색상이 변경됩니다.
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
일부 필수 View Controller에 대해 상태 표시줄 색상을 변경하는 방법
모든 제안을 읽고 몇 가지 시도를 한 후 다음 단계를 통해 특정 뷰컨트롤러에 이 기능을 적용할 수 있습니다.
첫 번째 단계:
info.plist를 열고 "View controller-based status bar apasure"라는 새 키를 [NO]에 삽입합니다.
두 번째 단계(설명만 할 뿐 구현은 필요 없습니다.
보통 AppDelegate 어플리케이션(_:didFinishLaunchingWithOptions:) 메서드에 다음 코드를 넣습니다.
스위프트 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
스위프트 3
UIApplication.shared.statusBarStyle = .lightContent
그러나 이는 모든 ViewController의 에 영향을 미칩니다.
특정 View Controller에 대해 이 기능을 수행하는 방법 - 마지막 단계:
.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
(2021년 10월 25일 현재)
Swift 5, Swift 4.2, Swift 4
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
Navigation Controller 탑재 Swift 4.2 솔루션
첫 번째 단계:
info.plist를 열고 "View controller-based status bar apaurance"라는 새 키를 삽입합니다.UIViewControllerBasedStatusBarAppearance
[YES] : 각 VC가 자체 상태 속성을 사용할 수 있도록 합니다.
두 번째 단계
각 VC에서 다음과 같이 preferredStatusBarStyle 속성을 덮어씁니다.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent //.default for black style
}
마지막 단계
커스텀 Navigation Controller 클래스의 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
}
나는 이 튜토리얼을 따라했고 나에게 효과가 있었다.하지만 주의사항이 있는지 잘 모르겠습니다.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
- info.plist를 합니다.
UIViewControllerBasedStatusBarAppearance
로로 합니다.false
. - 의 첫
AppDelegate.swift
이 들어있어요.didFinishLaunchingWithOptions
원하는 색상을 설정합니다.
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Swift 3 업데이트*
UIApplication.shared.statusBarStyle = .lightContent
여기에 10억 개의 답이 있기 때문에 (@Curur의 도움을 받아) 확장자 형태로 하나 더 추가해 보는 것은 어떨까 생각했습니다.
스위프트 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
Info.plist에서 View 컨트롤러 기반 상태 표시줄 모양을 임의의 값으로 정의해야 합니다.
YES를 정의하면 각 뷰 컨트롤러에서 preferredStatusBarStyle 함수를 덮어써야 합니다.
NO를 정의하면 AppDelegate에서 다음을 사용하여 스타일을 설정할 수 있습니다.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
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()
}
}
스위프트 3
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.black
}
이것이 특정 뷰 컨트롤러의 상태 표시줄 배경색을 설정하는 솔루션입니다.
SWIFT 2
내 뷰에 다음을 추가하여 상태 표시줄 배경의 모양을 성공적으로 변경할 수 있었습니다.출두 예정:
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = .redColor()
}
(2020년 6월 10일 기준)
Swift 5(파일 편집 없음)
「 」를 사용하고 Storyboard
접속해 주세요.NavigationController
을합니다.navigationBar
을합니다.Attributes Inspector
을 style
light content
(흰색 상태 표시줄) 다음을 제외한 모든 항목을 설정합니다.default
, ' style'이라고 .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
네비게이션 바 없음(Edit
UIViewControllerBasedStatusBarAppearance
View controller-based status bar appearance
your info.plist
value가 set value입니다.true
.
Override
preferredStatusBarStyle
class ViewController: UIViewController {
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
}
preferredStatusBarStyle
와 같이, 「」라고 전화합니다.self.setNeedsStatusBarAppearanceUpdate()
ViewDidLoad
set 「Info.plist 」에서도 할 수 있습니다.UIViewControllerBasedStatusBarAppearance
로로 합니다.YES
((YES
로 설정)
왜 그것이 작동하지 않는지는 명확하지 않다.코드를 확인해야 합니다.합니다.viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
[ ablosed ]()을 보면 합니다.viewWillDisappear
.
내 경우 스토리보드를 사용하여 뷰 컨트롤러를 구성합니다.모든 상태 표시줄 스타일을 변경합니다.
아래 그림에서 볼 수 있습니다.
Stars
입니다.CPBaseNavigationController
, .CPBaseNavigationController
is is is of of of의 입니다.UINavigationController
.
다음 setps를 시도합니다.
»
AppDelegate.swift
didFinishLaunchingWithOptions
, 덧셈, 덧셈//change status bar color UIApplication.sharedApplication().statusBarHidden = false UIApplication.sharedApplication().statusBarStyle = .LightContent
효과는 없습니다.
StoryBoard를 .
Base Tab BarController
(일부러) 선택하다Attributes Inspector
을.Sattus Bar
Light Content
너무 심해서 효과가 없어
지막마 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」
CPBaseNavigationController
func , " " "preferredStatusBarStyle
override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent }
잘 된다!
statusBarStyle
9.0을 할 수 .-[UIViewController preferredStatusBarStyle]
.
내비게이션 기반 응용 프로그램용 작업
var addStatusBar = UIView()
addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
self.window?.rootViewController?.view .addSubview(addStatusBar)
모든 것이 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)
스위프트 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
}
}
swift 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
}
UINavigationController 클래스의 확장을 만드는 것도 이 작업을 쉽게 수행할 수 있는 방법입니다.
「 」를 때문에,preferredStatusBarStyle:
UINavigationController 클래스 내에서 실행하지 않는 한 메서드는 동작하지 않습니다.
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Swift 4 네비게이션이 없는 특정 ViewController의 경우 ViewController 파일에 추가합니다.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
Swift 5 또는 xcode 11 이상에서 info.plist에 있는 (컨트롤러 기반 상태 표시줄 표시) 키를 아니요로 설정한 다음 프로젝트 대상으로 이동하여 General을 선택하고 상태 표시줄 스타일을 어둡거나 밝게 설정합니다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★뷰에 있는 상태 표시줄의 색상을 전체적으로 변경한 후 다시 표시로 변경한 것이 납득할 수 없는 답변이었습니다., 이 하려면 , 「」를 합니다.preferredStatusBarStyle
원하는 뷰 컨트롤러로 이동합니다.오랜 시간이 흐른 후 저는 이렇게 했습니다.
- View에서 컨트롤러 기반 상태 합니다.
info.plist
[YES (네)로 합니다.네] (으)ㄹ 수 있다 - 뷰 할 수 . 상태 표시줄의 스타일은 " "를 덮어씁니다.
preferredStatusBarStyle
. - 은 (뷰 컨트롤러에서는 때문에, (의) 모드 뷰 에서는 동작하지 않습니다.
modalPresentationCapturesStatusBarAppearance
, 또한 네비게이션컨트롤러와 같이 내장된 뷰컨트롤러가 있는 경우 상태바스타일에 대해 최상위 뷰컨트롤러에 문의합니다.「」의 덮어쓰기
childViewControllerForStatusBarStyle
임베디드 뷰 컨트롤러를 통과해야 하는데 안 되더라고요.기본 상태 표시줄 스타일로 삽입 뷰 컨트롤러 기본 상태 표시줄을 반환했습니다.다음과 같이 합니다.override var preferredStatusBarStyle: UIStatusBarStyle { if let topViewController = viewControllers.last { return topViewController.preferredStatusBarStyle } return .default }
아래 코드를 사용하여 특정 색상(RGB 형식)을 설정했습니다.App Delegate
삭제:
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로 설정된 컨트롤러 기반 상태 표시줄 표시
더 간단한 방법을 제안할 수 있어요
- 애플 문서 설명대로 viewDidLoad의 setNeedsStatusBarAppearanceUpdate를 호출하기만 하면 됩니다.
뷰 컨트롤러의 상태 표시줄 속성(예: 숨김/숨김 해제 상태 또는 스타일)이 변경되면 이 메서드를 호출합니다.애니메이션 블록 내에서 이 메서드를 호출하면 변경 내용이 애니메이션 블록의 나머지 부분과 함께 애니메이션화됩니다.
- 원하는 유형을 반환하는 preferredStatusBarStyle을 구현합니다.
iOS 10.1에서는 동작했습니다.
목표 C
[self setNeedsStatusBarAppearanceUpdate];
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
재빠르다
setNeedsStatusBarAppearanceUpdate()
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
아무도 이것을 지적하지 않았다니 놀랍다.아무튼 즐겨주세요:)
상태 바의 커스텀 컬러(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
Storyboard에서 네비게이션 컨트롤러로 이동하여 네비게이션 바를 선택하고 Attributes Inspector를 클릭한 다음 스타일을 기본값에서 검은색으로 변경합니다.바로 그거야!
Swift 4 또는 4.2의 경우
VC에 추가할 수 있습니다.
preferred Status Bar Style
반환값을 로 설정합니다.
.lightContent 또는 .default
예:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 3.0 업데이트
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
SWIFT 4.2 Graig Grummitt의 이 돌출적인 주제에 대한 훌륭한 기사에서 얻은 효과적인 해결책을 공유하고자 합니다.
스텝 1 다른 사람이 말한 것처럼 PLIST에 다음 추가
View controller-based status bar appearance YES
RootView컨트롤러에서 스텝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
it it it it it it라고 부르게 될 setNeedsStatusBarAppearanceUpdate()
.prefersStatusBarHidden
★★★★★★★★★★★★★★★★★」preferredStatusBarStyle
제 상황에서는 컨테이너 뷰 컨트롤러의 속성을 업데이트해야 했습니다.컨테이너 뷰 컨트롤러는 자녀 뷰 컨트롤러의 부모입니다.간단한 위임 방법을 사용하여 이 작업을 수행했습니다.
protocol MainViewControllerDelegate {
func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
func toggleStatusBar(visable: Bool)
}
물론 childViewController(Visible VC)를 인스턴스화할 때는 MainViewController(컨테이너 VC)를 위임자로 설정하는 것을 잊지 마십시오.가끔 그래요.:)
childViewController.delegate = self
그런 다음 childViewController에서 상태 표시줄을 업데이트해야 할 때 위임 메서드를 호출했습니다.
self.delegate?.updateStatusBarStyle(statBarStayle: .default)
위에서 설명한 바와 같이 Graig Grummitt는 이 솔루션에 대해 더 자세히 설명하고 UINavigation Controller와도 협력합니다.링크:상태 표시줄의 미스터리한 케이스
두 가지 상황이 있습니다.
1. show navigation bar (네비게이션 바 표시)
1) 추가1UIViewControllerBasedStatusBarAppearance
View controller-based status bar appearance
your info.plist
value가 set value입니다.true
.
2) 커스텀 Navigation Controller 클래스의 preferredStatusBarStyle 속성을 덮어씁니다(@guillama에서).
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
}
오버라이드 3) 오버라이드preferredStatusBarStyle
'이것'은 다음과 같습니다.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
2. 숨겨진 탐색 모음
1) 동감
2) 위의 두 번째 단계는 필요하지 않습니다. 세 번째 단계는 직접 구현해야 합니다.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
Swift 5, Swift 4.2에서는 이 방법을 사용합니다.
Info.plist에 다음 값을 추가합니다.
UIView Controller Based Status BarApearance = YES
또는
UIViewControllerBasedStatusBarAppliance = NO(변경 내용을 보려면)
UIStatus 바숨김 = NO
UIStatusBarStyle = UIStatusBarStyleDefault(또는 시작할 때 가벼운 상태 표시줄 텍스트를 보려면 UIStatusBarStyleLightContent로 설정)
그런 다음 아래 코드를 라이트 콘텐츠를 볼 특정 뷰 컨트롤러에 배치합니다(어두운 텍스트가 preferredStatusBarStyle을 .darkContent로 설정하는 것을 보려면).
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
super.viewDidLoad()
if let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as? UIView {
statusBar.backgroundColor = .sunflowerYellow
}
}
Supporting Files 그룹(왼쪽 상단 - 프로젝트 이름)을 클릭합니다.[Info]로 이동합니다.아래 번들 이름처럼 목록 사이에 있는 +를 클릭합니다.그리고 "View controller-based status bar attribution"을 추가하여 NO로 설정합니다.그런 다음 AppDelegate.swift를 열고 다음과 같이 수정합니다.
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
return true
}
바로 그거야.
언급URL : https://stackoverflow.com/questions/26956728/changing-the-status-bar-color-for-specific-viewcontrollers-using-swift-in-ios8
'programing' 카테고리의 다른 글
Bash 함수에서 문자열 값을 반환하는 방법 (0) | 2023.04.09 |
---|---|
VBA를 사용한 Excel 응용 프로그램 닫기 (0) | 2023.04.09 |
플리터 용기 둥근 테두리 제공 (0) | 2023.04.09 |
준비 영역의 파일에 git diff 표시 (0) | 2023.04.09 |
Postgres에 대량 삽입하는 가장 빠른 방법은 무엇입니까? (0) | 2023.04.09 |