在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
时。
在我的情况下,我使用故事板来组织我的视图控制器。我想更改所有状态栏样式。
你可以在下面看到。
Stars
View Controller是一个CPBaseNavigationController
,而CPBaseNavigationController
是UINavigationController
的子类。
我尝试做下面的步骤:
- 在
AppDelegate.swift
funcdidFinishLaunchingWithOptions
,添加//change status bar color UIApplication.sharedApplication().statusBarHidden = false UIApplication.sharedApplication().statusBarStyle = .LightContent
但没有效果。 - 在StoryBoard中,找到
Base Tab BarController
(上图)。选择Attributes Inspector
,将Sattus Bar
属性更改为Light Content
.so坏,没有效果。
- 最后我明白了。在我的自定义导航控制器
CPBaseNavigationController
中,添加funcpreferredStatusBarStyle
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
我可以建议你一个更简单的方法,
- 如Apple文档所述,只需在viewDidLoad中调用setNeedsStatusBarAppearanceUpdate,
如果视图控制器的状态栏属性(例如隐藏/取消隐藏状态或样式)发生更改,请调用此方法。如果在动画块中调用此方法,则会将更改与动画块的其余部分一起设置动画。
- 实施preferredStatusBarStyle返回您的首选类型。
它在iOS 10.1中适用于我。
目标C.
[self setNeedsStatusBarAppearanceUpdate];
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
迅速
setNeedsStatusBarAppearanceUpdate()
var preferredStatu以上是关于在iOS8中使用Swift更改特定ViewControllers的状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章
更改自定义 UIButton 的 TitleColor (iOS 8 + swift)
如何在 Swift 中使用 layoutIfNeeded() 不为特定约束更改设置动画?