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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在iOS8中使用Swift更改特定ViewControllers的状态栏颜色相关的知识,希望对你有一定的参考价值。

override func preferredStatusBarStyle() -> UIStatusBarStyle {
 return UIStatusBarStyle.LightContent;
}

在任何ViewController中使用上面的代码将statusBar颜色设置为White为特定的viewcontroller在ios8中不起作用。有什么建议?使用UIApplication.sharedApplication方法,在整个应用程序的Info.plist中所需的更改之后,颜色会发生变化。

// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

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

答案

在阅读了所有建议并尝试了一些内容之后,我可以使用以下步骤将其用于特定的viewcontrollers:

第一步:

打开info.plist并将名为“View controller-based status bar appearance”的新密钥插入NO

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

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

斯威夫特2

UIApplication.sharedApplication().statusBarStyle = .LightContent

斯威夫特3

UIApplication.shared.statusBarStyle = .lightContent

但这会影响所有ViewControllers的statusBarStyle

那么,如何使这个特定的ViewControllers工作 - 最后一步:

打开要更改statusBarStyle的viewcontroller文件,并将以下代码放在viewWillAppear()中,

斯威夫特2

UIApplication.sharedApplication().statusBarStyle = .LightContent

斯威夫特3

UIApplication.shared.statusBarStyle = .lightContent

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

斯威夫特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

另一答案

对于斯威夫特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
    }
另一答案

如你所述实现preferredStatusBarStyle并在self.setNeedsStatusBarAppearanceUpdate()中调用ViewDidLoad,并在Info.plist中将UIViewControllerBasedStatusBarAppearance设置为YES(默认情况下为YES

目前尚不清楚为什么它不工作。我需要检查代码。另外一个建议是使用viewDidLoad UIApplication.sharedApplication().statusBarStyle = .LightContent中的工作代码并将其更改为默认值,当您查看get消失的viewWillDisappear时。

另一答案

在我的情况下,我使用故事板来组织我的视图控制器。我想更改所有状态栏样式。

你可以在下面看到。

enter image description here

Stars View Controller是一个CPBaseNavigationController,而CPBaseNavigationControllerUINavigationController的子类。

我尝试做下面的步骤:

  1. AppDelegate.swift func didFinishLaunchingWithOptions,添加 //change status bar color UIApplication.sharedApplication().statusBarHidden = false UIApplication.sharedApplication().statusBarStyle = .LightContent 但没有效果。
  2. 在StoryBoard中,找到Base Tab BarController(上图)。选择Attributes Inspector,将Sattus Bar属性更改为Light Content.so坏,没有效果。

enter image description here

  1. 最后我明白了。在我的自定义导航控制器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 4对于没有使用navigationViewController嵌入的特定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文件中添加以下键:

查看基于控制器的状态栏外观,其布尔值设置为NO

Screenshot 1

Screenshot 2

另一答案

我可以建议你一个更简单的方法,

  1. 如Apple文档所述,只需在viewDidLoad中调用setNeedsStatusBarAppearanceUpdate

如果视图控制器的状态栏属性(例如隐藏/取消隐藏状态或样式)发生更改,请调用此方法。如果在动画块中调用此方法,则会将更改与动画块的其余部分一起设置动画。

  1. 实施preferredStatusBarStyle返回您的首选类型。

它在iOS 10.1中适用于我。

目标C.

[self setNeedsStatusBarAppearanceUpdate];

-(UIStatusBarStyle)preferredStatusBarStyle {
     return UIStatusBarStyleLightContent;
}

迅速

setNeedsStatusBarAppearanceUpdate()

var preferredStatu

以上是关于在iOS8中使用Swift更改特定ViewControllers的状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS8 和 Swift 中推送视图

更改自定义 UIButton 的 TitleColor (iOS 8 + swift)

如何使用 swift 在特定视图中更改状态栏颜色?

如何在 Swift 中使用 layoutIfNeeded() 不为特定约束更改设置动画?

TTTAttributedLabel 链接检测在 iOS8 中无法使用 swift

在 ios8 中使用 swift 语言发送短信