Anu*_*nuj 174 statusbar uiviewcontroller swift xcode6 ios8
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
Run Code Online (Sandbox Code Playgroud)
在任何ViewController中使用上面的代码将statusBar颜色设置为White为特定的viewcontroller 在iOS8中不起作用.有什么建议?使用UIApplication.sharedApplication方法,在整个应用程序的Info.plist中所需的更改之后,颜色会发生变化.
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
如何更改某些必需和特定ViewControllers的状态栏颜色?
Anu*_*nuj 340
在阅读了所有建议并尝试了一些事情之后,我可以使用以下步骤将其用于特定的viewcontrollers:
第一步:
打开info.plist并将名为" View controller-based status bar appearance " 的新密钥插入NO
第二步(只是一个解释,不需要实现这个):
通常我们将以下代码放在AppDelegate的应用程序(_:didFinishLaunchingWithOptions :)方法中,
斯威夫特2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
UIApplication.shared.statusBarStyle = .lightContent
Run Code Online (Sandbox Code Playgroud)
但这会影响statusBarStyle
所有ViewControllers.
那么,如何使这个特定的ViewControllers工作 - 最后一步:
打开要更改的viewcontroller文件statusBarStyle
并将以下代码放入viewWillAppear()
,
斯威夫特2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
UIApplication.shared.statusBarStyle = .lightContent
Run Code Online (Sandbox Code Playgroud)
此外,viewWillDisappear()
为该特定viewController 实现该方法并放入以下代码行,
斯威夫特2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Run Code Online (Sandbox Code Playgroud)
此步骤将首先更改statusBarStyle
特定视图控制器,然后将其更改回default
特定视图控制器消失时.未实现viewWillDisappear()
将statusBarStyle
永久更改为新定义的值UIStatusBarStyle.LightContent
Ben*_*erd 86
(截至2018年11月14日)
Swift 4,Swift 4.2
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Run Code Online (Sandbox Code Playgroud)
chr*_*s_s 26
我按照本教程,它对我有用.但是,我不确定是否有任何警告.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
为false
.AppDelegate.swift
包含的第一个函数中,didFinishLaunchingWithOptions
设置所需的颜色.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Swift 3更新*
UIApplication.shared.statusBarStyle = .lightContent
小智 24
带NavigationController的Swift 4.2解决方案
第一步:
打开info.plist并插入一个名为" 查看基于控制器的状态栏外观 " 的新键,或者UIViewControllerBasedStatusBarAppearance
输入YES以让每个VC使用自己的状态属性.
第二步
在每个VC中,覆盖preferredStatusBarStyle属性,如下所示:
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent //.default for black style
}
Run Code Online (Sandbox Code Playgroud)
最后一步
覆盖自定义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
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*rry 20
这里有十亿个答案所以我想为什么不以扩展的形式添加另一个(在@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
}
}
}
Run Code Online (Sandbox Code Playgroud)
UIApplication.statusBarBackgroundColor = .blue
Run Code Online (Sandbox Code Playgroud)
Nik*_*wal 17
在Info.plist中,您需要将基于View控制器的状态栏外观定义为任何值.
如果将其定义为YES,则应在每个视图控制器中覆盖preferredStatusBarStyle函数.
如果您将其定义为NO,则可以使用AppDelegate设置样式
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Run Code Online (Sandbox Code Playgroud)
A.G*_*A.G 14
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()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 12
SWIFT 2
通过在viewWillAppear中添加以下内容,我能够成功更改状态栏背景的外观:
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = .redColor()
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 12
斯威夫特3
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.black
}
Run Code Online (Sandbox Code Playgroud)
这是为特定视图控制器设置状态栏背景颜色的解决方案.
对于斯威夫特3
的.plist
View controller-based status bar appearance = NO
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
preferredStatusBarStyle
如你所述实现并调用 self.setNeedsStatusBarAppearanceUpdate()
,ViewDidLoad
并在Info.plist中设置UIViewControllerBasedStatusBarAppearance
为YES
(YES
默认情况下)
目前尚不清楚为什么它不工作.我需要检查代码.另外一个建议是使用工作代码viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
并在查看get消失时将其更改为默认值viewWillDisappear
.
在我的情况下,我使用故事板来组织我的视图控制器.我想更改所有状态栏样式.
你可以在下面看到.
Stars
View Controller是一个CPBaseNavigationController
,CPBaseNavigationController
是它的子类UINavigationController
.
我尝试做下一个setps:
在AppDelegate.swift
func中didFinishLaunchingWithOptions
,添加
//change status bar color
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
但没有效果.
在StoryBoard中,找到Base Tab BarController
(上图中的图片).选择Attributes Inspector
,将Sattus Bar
属性更改为Light Content
.so bad,no effect.
最后我明白了.在我的自定义导航控制器中CPBaseNavigationController
,添加funcpreferredStatusBarStyle
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
Run Code Online (Sandbox Code Playgroud)
它运作良好!
此外,statusBarStyle
在9.0中弃用,您可以使用-[UIViewController preferredStatusBarStyle]
.
(截至 2020 年 6 月 10 日)
Swift 5 (无需编辑.Plist
文件)
如果您正在使用Storyboard
,请转到NavigationController
,选择navigationBar
,单击Attributes Inspector
,然后更改style
。如果你需要light content
(白色状态栏)设置它除了default
可以说设置样式black
如果你想要dark content
(黑色状态栏)设置它default
。
默认 ( UIBarStyleDefault
) 导致前景UIStatusBarStyleDefault
状态栏变暗。并且UIBarStyleBlack
会给出一个UIStatusBarStyleLightContent
状态栏。
以编程方式
let nav = UINavigationController(rootViewController: rootViewController)
nav.navigationBar.barStyle = .default //gives you dark Content status bar
nav.navigationBar.barStyle = .black //gives you light content status bar
Run Code Online (Sandbox Code Playgroud)
没有导航栏(编辑.Plist
)
将UIViewControllerBasedStatusBarAppearance
/添加View controller-based status bar appearance
到您的info.plist
,并设置值为true
.
Override
preferredStatusBarStyle
您的控制器中的属性
class ViewController: UIViewController {
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
}
Run Code Online (Sandbox Code Playgroud)
适用于导航应用
var addStatusBar = UIView()
addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
self.window?.rootViewController?.view .addSubview(addStatusBar)
Run Code Online (Sandbox Code Playgroud)
小智 7
在Swift 3.0 Xcode 8中,一切都变得容易多了
之后使用App Delegate文件中的代码
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Run Code Online (Sandbox Code Playgroud)
插入此:
UINavigationBar.appearance().barStyle = .black
UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)
小智 7
斯威夫特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
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
Swift 4对于没有使用navigationViewController嵌入的特定ViewController,只需将其添加到ViewController文件即可.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我在这方面遇到了一些麻烦。对于全局更改视图中的状态栏颜色确实出现然后将其更改回视图确实像接受的答案一样消失了,我真的感觉不太好。信不信由你,你可以通过覆盖preferredStatusBarStyle
你想要的视图控制器来让它工作。很长一段时间后,这就是我为使其工作所做的工作:
info.plist
为 YES。preferredStatusBarStyle
.modal?Presentation?Captures?Status?Bar?Appearance
为 Yes。此外,如果您有嵌入式视图控制器,例如在导航控制器中,它会询问最顶层的视图控制器状态栏样式。覆盖child?View?Controller?For?Status?Bar?Style
和传递嵌入式视图控制器应该可以工作,但对我来说却没有。所以我只是将嵌入式视图控制器的首选状态栏作为首选状态栏样式返回。像这样的东西:
override var preferredStatusBarStyle: UIStatusBarStyle {
if let topViewController = viewControllers.last {
return topViewController.preferredStatusBarStyle
}
return .default
}
Run Code Online (Sandbox Code Playgroud)完成这项工作的另一种非常简单的方法是创建UINavigationController类的扩展。
由于覆盖的preferredStatusBarStyle:
方法不会工作,除非我们这样做了的UINavigationController类的内部。
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找如何将状态栏更改为自定义颜色的解决方案,那么这是可行的解决方案。
let statusBarView = UIView()
view.addSubview(statusBarView)
statusBarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
statusBarView.backgroundColor = .blue
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
189324 次 |
最近记录: |