override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
特定のViewControllerに対してstatusBarの色をWhiteに設定するために任意のViewControllerで上記のコードを使用するは、私にとってはiOS 8では機能しません。助言がありますか? UIApplication.sharedApplicationメソッドを使用すると、アプリ全体のInfo.plistで必要な変更が行われた後に色が変わります。
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
必要な固有のViewControllerに対して、ステータスバーの色を変更するにはどうすればよいですか。
すべての提案を読み、いくつかのことを試した後、次の手順を使用して特定のビューコントローラに対してこれを機能させることができます。
第一歩:
Info.plistを開き、「View Controllerベースのステータスバーの外観」という名前の新しいキーをに挿入します。いいえ
第2ステップ(単なる説明、これを実装する必要はありません):
通常、AppDelegateのアプリケーション(_:didFinishLaunchingWithOptions :)メソッドに次のコードを追加します。
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
しかしそれはすべてのViewControllerのstatusBarStyle
に影響します。
では、特定のViewControllerに対してこれを機能させる方法 - 最終ステップ:
statusBarStyle
を変更したいビューコントローラファイルを開き、以下のコードをviewWillAppear()
に入力します。
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
また、その特定のviewControllerに対してviewWillDisappear()
メソッドを実装し、次のコード行を追加します。
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
この手順では、まず特定のビューコントローラのstatusBarStyle
を変更し、次に特定のビューコントローラが消えるとそれをdefault
に戻します。 viewWillDisappear()
を実装しないと、statusBarStyle
は永続的に新しい定義済みのUIStatusBarStyle.LightContent
に変更されます。
(2019年3月14日現在)
Swift 4、Swift 4.2
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
私はこのチュートリアルに従った、そしてそれは私のために働いた。ただし、警告があるかどうかはわかりません。
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-Swift
UIViewControllerBasedStatusBarAppearance
をfalse
に設定します。didFinishLaunchingWithOptions
を含むAppDelegate.Swift
の最初の関数で、必要な色を設定します。UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Swift 3 Update*
UIApplication.shared.statusBarStyle = .lightContent
ここには10億の答えがあるので、私はなぜ拡張子の形で別のものを追加しないのかと思いました(@Cœurの助けを借りて)
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 Controllerベースのステータスバーの外観を任意の値に定義する必要があります。
YESと定義した場合は、各View Controllerの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()
}
}
NavigationControllerによるSwift 4.2ソリューション
第一歩:
Info.plistを開き、 "View Controllerベースのステータスバーの外観"またはUIViewControllerBasedStatusBarAppearance
toYESという新しいキーを挿入します各VCに独自のstatusプロパティを使用させる。
第2ステップ
各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
}
Swift 3
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.black
}
これが、特定のView Controllerのステータスバーの背景色を設定するための解決策です。
Swift 2
私のviewWillAppearに以下を追加することでステータスバーの背景の外観を変更することに成功しました。
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = .redColor()
}
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
}
私の状況では、ストーリーボードを使ってView Controllerを整理しています。ステータスバーのスタイルをすべて変更したいのですが。
あなたは下の絵で見ることができます。
Stars
View ControllerはCPBaseNavigationController
で、CPBaseNavigationController
はUINavigationController
のサブクラスです。
次の準備をしてみます。
AppDelegate.Swift
func didFinishLaunchingWithOptions
に、追加
//change status bar color
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
しかし効果はありません。
StoryBoardでBase Tab BarController
を見つけます(上の画像)。Attributes Inspector
を選択し、Sattus Bar
属性をLight Content
.soに変更します。
私のカスタムナビゲーションコントローラCPBaseNavigationController
に、func preferredStatusBarStyle
を追加します。
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
それはうまくいきます!
さらに、9.0では廃止予定のstatusBarStyle
には、-[UIViewController preferredStatusBarStyle]
を使用できます。
前述のようにpreferredStatusBarStyle
を実装し、ViewDidLoad
内でself.setNeedsStatusBarAppearanceUpdate()
を呼び出し、さらにInfo.plist内でUIViewControllerBasedStatusBarAppearance
をYES
に設定します(デフォルトではYES
)。
それが機能していない理由は明確ではありません。コードを確認する必要があります。他の提案はviewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
の作業コードで行って、表示が消えたときにこれをデフォルトに変更するviewWillDisappear
です。
Swift 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
}
}
ナビゲーションベースのアプリケーションのための作品
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)
Swift 4ナビゲーションなしの特定のViewControllerについては、ViewControllerファイルに追加するだけです。
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
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
ファイルに以下のキーを追加する必要があります。
ビューベースのステータスバーの外観 ブール値を に設定 _ _ _ _//
私はこれにいくらか問題がありました。私は、ビュー内のステータスバーの色をグローバルに変更してからビューに戻すと、受け入れられた答えのように消えてしまうことについて、あまり気にしませんでした。信じられないかもしれませんが、希望するView ControllerでpreferredStatusBarStyle
をオーバーライドすることでこれを機能させることができます。久しぶりにこれは私がそれを動かすためにしたことです:
info.plist
のView Controllerベースのステータスバーの外観をYESに変更します。preferredStatusBarStyle
をオーバーライドすることでステータスバーのスタイルを変更できるようになりました。modalPresentationCapturesStatusBarAppearance
をYesに設定しないとそうではありません。また、たとえばNavigation Controllerのように、View Controllerが埋め込まれている場合は、一番上のView Controllerにステータスバースタイルを要求します。 childViewControllerForStatusBarStyle
をオーバーライドして埋め込みView Controllerを渡すことは機能するはずですが、それは私にとってはうまくいきませんでした。だから私はちょうど優先ステータスバーのスタイルとして埋め込みView Controllerの優先ステータスバーを返しました。このようなもの:
override var preferredStatusBarStyle: UIStatusBarStyle {
if let topViewController = viewControllers.last {
return topViewController.preferredStatusBarStyle
}
return .default
}
もっと簡単な方法を提案できます。
非表示/非表示ステータスやスタイルなどのView Controllerのステータスバー属性が変更された場合は、このメソッドを呼び出します。アニメーションブロック内でこのメソッドを呼び出すと、変更はアニメーションブロックの他の部分と共にアニメーション化されます。
それはiOS 10.1で私のために働きました。
目標C
[self setNeedsStatusBarAppearanceUpdate];
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
スイフト
setNeedsStatusBarAppearanceUpdate()
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
私は誰もこれを指摘していないのに驚いています。とにかくお楽しみください:)
ストーリーボードで私と一緒に働いたことは、Navigation Controllerに行き、ナビゲーションバーを選択し、Attributes Inspectorをクリックし、そしてスタイルをデフォルトから黒に変更することです。それでおしまい!
Swift 3.0アップデート
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
これを機能させるもう1つの本当に簡単な方法は、UINavigationControllerクラスの拡張を作成することです。
preferredStatusBarStyle:
メソッドをオーバーライドしても動作しませんの場合を除き、UINavigationControllerクラスの内部で行います。
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Swift 4または4.2では
あなたはあなたのvcに追加することができます
preferredStatusBarStyle
戻り値を
.lightContentまたは.default
例:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
[Supporting Files]グループ(左側の上部 - プロジェクトの名前)をクリックします。情報に移動します。バンドル名の下のように、リストの間のどこかで+をクリックします。そして、「View controller-based status bar appearence」を追加して、それをNOに設定します。次にAppDelegate.Swiftを開き、次のように変更します。
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
return true
}
それでおしまい。
Swift4の特定のView Controller用のナビゲーションベースの機能
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)
Xcode 10では、クラスを作成してviewControllerクラスの前に配置することができます。すべてのView Controllerでこのクラスを呼び出すことができます。ライトコンテンツステータスバーが必要です。
class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}
それでは、viewControllerクラスを次のように変更してください。
class YourViewController: UIViewControllerWithLightStatusBar {
...
}
そしてそれだけです...
警告
'statusBarStyle'のセッターは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
です。
これは私には有効です
Swift 4.2ねえ、私がGraig Grummittによるこの省略可能な主題に関する素晴らしい記事から得た解決策を共有したいと思いました。
ステップ1他の人があなたのPLISTに以下の追加を述べたように
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は、このソリューションとUINavigationControllersとの連携についても詳しく説明しています。ここにリンク: ステータスバーの不思議な例
私は文字通りこの同じ問題に陥りました。それを把握するために4時間かけて私を連れて行って。私はここで与えられたすべての答えを試してみました、そして私が得た最良のものはステータスバー白への見出しを得ることでした。しかし、バッテリーバーなどの他の部分は、私が何をしても黒いままでした。この質問で提供されているすべての解決策を適用することに関してです。そこで私は自分のステップをさかのぼることにし、Xcodeの通常の機能と色を変えるコードを変更していたCocoaPod依存関係をダウンロードしたことを知りました。私にとっては、それは "ChameleonFramework"依存でした。だから私はあなたがあなたがCocoaPodsからインストールしたあなたの依存関係をあなたがすべての解決策を適用して、あなたのために働いていないなら最新のものを削除することによってチェックすることを勧めます。