首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS8中使用Swift更改特定ViewControllers的状态栏颜色

在iOS8中使用Swift更改特定ViewControllers的状态栏颜色
EN

Stack Overflow用户
提问于 2014-11-16 20:05:37
回答 37查看 258.2K关注 0票数 209
代码语言:javascript
复制
override func preferredStatusBarStyle() -> UIStatusBarStyle {
 return UIStatusBarStyle.LightContent;
}

在任何ViewController中使用上面的代码将特定视图控制器的statusBar颜色设置为白色在iOS8 for me中不起作用。有什么建议吗?使用UIApplication.sharedApplication方法,在整个应用程序的Info.plist中进行必要的更改后,颜色会发生变化。

代码语言:javascript
复制
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

如何更改某些必需的和特定于的ViewControllers的状态栏颜色

EN

回答 37

Stack Overflow用户

回答已采纳

发布于 2015-02-14 14:59:45

在阅读了所有的建议,并尝试了一些东西之后,我可以使用以下步骤使其适用于特定的视图控制器:

第一步:

打开你的info.plist并插入一个名为“查看基于控制器的状态栏外观”的新键到NO

第二步(只是一个解释,不需要实现它):

通常我们将以下代码放入AppDelegate的应用程序(_:didFinishLaunchingWithOptions:)方法中,

Swift 2

代码语言:javascript
复制
UIApplication.sharedApplication().statusBarStyle = .LightContent

Swift 3

代码语言:javascript
复制
UIApplication.shared.statusBarStyle = .lightContent

但这会影响所有ViewControllers的statusBarStyle

所以,如何让它为特定的ViewControllers工作-最后一步:

打开要更改statusBarStyle的视图控制器文件,并将以下代码放入viewWillAppear()中。

Swift 2

代码语言:javascript
复制
UIApplication.sharedApplication().statusBarStyle = .LightContent

Swift 3

代码语言:javascript
复制
UIApplication.shared.statusBarStyle = .lightContent

另外,为该特定viewController实现viewWillDisappear()方法,并放入以下几行代码:

Swift 2

代码语言:javascript
复制
override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default

}

Swift 3

代码语言:javascript
复制
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}

此步骤将首先更改特定视图控制器的statusBarStyle,然后在特定视图控制器消失时将其更改回default。如果不实现viewWillDisappear()statusBarStyle将永久更改为新定义的UIStatusBarStyle.LightContent

票数 352
EN

Stack Overflow用户

发布于 2016-10-28 07:44:42

(截至2021年10月25日)

Swift 5Swift 4.2Swift 4

代码语言:javascript
复制
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    .lightContent
}
票数 140
EN

Stack Overflow用户

发布于 2018-11-16 23:19:17

采用NavigationController的Swift 4.2解决方案

第一步:

打开你的info.plist并插入一个名为“查看基于控制器的状态栏外观”的新键,或者将UIViewControllerBasedStatusBarAppearance设置为YES,让每个VC使用自己的状态属性。

第二步

在每个VC中,覆盖preferredStatusBarStyle属性,如下所示:

代码语言:javascript
复制
override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent //.default for black style
}

最后一步

覆盖自定义NavigationController类中的preferredStatusBarStyle属性:

代码语言:javascript
复制
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
}
票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26956728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档