override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
在任何ViewController中使用上面的代码,为特定的viewcontroller doesnt work in iOS8 for me 将statusBar颜色设置为White . 有什么建议?使用UIApplication.sharedApplication方法,在整个应用程序的Info.plist中所需的更改之后,颜色会发生变化 .
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
如何更改某些所需的状态栏颜色和 specific ViewControllers ?
28 回答
SWIFT 2
通过在viewWillAppear中添加以下内容,我能够成功更改状态栏背景的外观:
在阅读了所有建议并尝试了一些内容之后,我可以使用以下步骤将其用于特定的viewcontrollers:
First Step:
打开info.plist并插入名为“查看基于控制器的状态栏外观”的新密钥到 NO
Second Step (Just an explanation, no need to implement this):
通常我们将以下代码放在AppDelegate的应用程序(_:didFinishLaunchingWithOptions :)方法中,
Swift 2
Swift 3
但这会影响所有ViewControllers的
statusBarStyle
.So, how to get this working for specific ViewControllers - Final Step:
打开要更改
statusBarStyle
的viewcontroller文件,并将以下代码放在viewWillAppear()
中,Swift 2
Swift 3
此外,为该特定viewController实现
viewWillDisappear()
方法并放入以下代码行,Swift 2
Swift 3
此步骤将首先更改特定视图控制器的
statusBarStyle
,然后在特定视图控制器消失时将其更改回default
. 未实现viewWillDisappear()
将永久地将statusBarStyle
更改为UIStatusBarStyle.LightContent
的新定义值(截至2019年3月14日)
Swift 4 , Swift 4.2
我按照本教程,它对我有用 . 但是,我不确定是否有任何警告 .
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
打开info.plist并将
UIViewControllerBasedStatusBarAppearance
设置为false
.在
AppDelegate.swift
的第一个函数中,包含didFinishLaunchingWithOptions
,设置所需的颜色 .UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
UIApplication.shared.statusBarStyle = .lightContent
在Info.plist中,您需要将基于View控制器的状态栏外观定义为任何值 .
如果将其定义为YES,则应在每个视图控制器中覆盖preferredStatusBarStyle函数 .
如果您将其定义为NO,则可以使用AppDelegate设置样式
这里有十亿个答案所以我想为什么不以 extension 的形式添加另一个答案(在@Cœur的帮助下)
斯威夫特3
扩展:
实施:
Swift 3
这是为特定视图控制器设置状态栏背景颜色的解决方案 .
Swift 4.2 solution with NavigationController
First Step:
打开info.plist并插入一个名为“View controller-based status bar appearance”或
UIViewControllerBasedStatusBarAppearance
的新密钥,让每个VC使用自己的status属性 .Second Step
在每个VC中,覆盖preferredStatusBarStyle属性,如下所示:
Last step
覆盖自定义NavigationController类中的preferredStatusBarStyle属性:
对于斯威夫特3
的.plist
AppDelegate.swift
如上所述实现
preferredStatusBarStyle
并在ViewDidLoad
中调用self.setNeedsStatusBarAppearanceUpdate()
,并在Info.plist中将UIViewControllerBasedStatusBarAppearance
调用为YES
(默认情况下为YES
)目前尚不清楚为什么它不工作 . 我需要检查代码 . 另一个建议是使用
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
中的工作代码,并在查看get消失viewWillDisappear
时将其更改为默认值 .在我的情况下,我使用故事板来组织我的视图控制器 . 我想更改所有状态栏样式 .
你可以在下面看到 .
Stars
View Controller是CPBaseNavigationController
,CPBaseNavigationController
是UINavigationController
的子类 .我尝试做下一个setps:
AppDelegate.swift
funcdidFinishLaunchingWithOptions
中,添加但没有效果 .
Base Tab BarController
(上图中的图片) . 选择Attributes Inspector
,将Sattus Bar
属性更改为Light Content
. 糟糕,没有效果 .CPBaseNavigationController
中,添加功能preferredStatusBarStyle
它运作良好!
Besides,statusBarStyle deprecated in 9.0,you can use -[UIViewController preferredStatusBarStyle].
适用于导航应用
在Swift 3.0 Xcode 8中,一切都变得容易多了
在App Delegate中使用以下代码文件,之后
插入此:
Swift 3
Swift 4 对于没有使用navigationViewController嵌入的特定ViewController,只需将其添加到ViewController文件中即可 .
我使用
App Delegate
文件中的以下代码设置了特定颜色(RGB格式):您还需要在
Info.plist
文件中添加以下键:View controller-based status bar appearance ,布尔值设置为 NO
我可以建议你一个更简单的方法,
它在iOS 10.1中适用于我 .
Objective C
Swift
我很惊讶没有人指出这一点 . 无论如何享受:)
我遇到这个问题 . 对于全局更改状态栏颜色在视图中确实显示并且然后将其更改回视图确实像已接受的答案一样消失时我感觉不太好 . 信不信由你可以通过在所需的视图控制器上覆盖
preferredStatusBarStyle
来实现这一点 . 经过很长时间,这就是我所做的工作:将
info.plist
中基于控制器的状态栏外观更改为YES .现在,任何全屏视图控制器都可以通过覆盖
preferredStatusBarStyle
来更改状态栏样式 .我指定全屏,因为这对于(非全屏)模态视图控制器不起作用,而不是将
modalPresentationCapturesStatusBarAppearance
设置为是 .此外,如果你有嵌入式视图控制器,例如在导航控制器中,它会向最顶层的视图控制器询问状态栏样式 . 覆盖
childViewControllerForStatusBarStyle
并传递嵌入式视图控制器应该可以工作,但它不适合我 . 所以我只是将嵌入式视图控制器首选状态栏作为首选状态栏样式返回 . 像这样的东西:Swift 3.0更新
在Storyboard中,对我有用的是导航控制器,选择导航栏,单击属性检查器,然后将样式从默认更改为黑色 . 而已!
另一个非常简单的方法就是创建UINavigationController类的扩展 .
由于覆盖
preferredStatusBarStyle:
方法不能正常工作 UNLESS 我们在UINavigationController类中执行此操作 .}
单击Supporting Files组(左侧顶部 - 项目名称) . 导航到信息 . 单击列表之间的某个位置,如下面的包名称 . 并添加“查看基于控制器的状态栏外观”并将其设置为NO . 然后打开AppDelegate.swift并像这样修改:
而已 .
我文学上也遇到了同样的问题 . 花了我4个多小时来搞清楚 . 我尝试了这里给出的所有答案,我得到的最好的是获得状态栏白色的 Headers . 但是无论我做了什么,其他部分,如电池条和其他部分仍然是黑色的:关于应用此问题中提供的所有解决方案 . 所以我决定回溯我的步骤,并了解到我已经下载了一个CocoaPod依赖项,它改变了Xcode的正常功能和改变颜色的代码 . 对我来说,这是“ChameleonFramework”的依赖性 . 因此,如果您已应用所有解决方案并且不适合您,我建议您检查您从CocoaPods安装的依赖项,删除最新的依赖项 .
对于Xcode 10,您可以创建一个类并将其放在您的viewController类之前,您可以在所有视图控制器中调用此类,需要一个轻量级状态栏...
现在更改viewController类:
就这样...
SWIFT 4.2 嘿,我想分享一个解决方案,这对我来说很有用,我是从Graig Grummitt的一篇关于这个特殊主题的文章中得到的 .
步骤1正如其他人在您的PLIST中提到的ADD
RootViewcontroller中的第2步添加如下
更新属性
statusBarHidden
或vcStatusBarStyle
时,它将调用setNeedsStatusBarAppearanceUpdate()
并将使用prefersStatusBarHidden
或preferredStatusBarStyle
的新值更新状态栏 . 在我的情况下,我不得不更新容器viewcontroller的这些属性,这是visable的父级childviewcontroller . 我使用一个简单的委托方法做到了这一点 .在实例化childViewController(Visible VC)时,不要忘记将MainViewcontroller(Container VC)设置为其委托 . 我有时会这样做 . :)
然后在childViewController中,我只需要在需要时调用委托方法来更新状态栏 .
如上所述,Graig Grummitt详细介绍了该解决方案,并且还使用了UINavigationControllers . 链接在这里:The Mysterious Case of the Status Bar
Swift 3
在
AppDelegate
文件里面func application
方法Swift 4.0请在“didFinishLaunchingWithOptions launchOptions:”Appdelegate类中使用此代码