如何在Swift iOS应用程序中隐藏状态栏?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift iOS应用程序中隐藏状态栏?相关的知识,希望对你有一定的参考价值。
我想删除屏幕顶部的状态栏。
这不起作用:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
application.statusBarHidden = true
return true
}
我也尝试过:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
var controller = UIViewController()
application.statusBarHidden = true
controller.setNeedsStatusBarAppearanceUpdate()
var view = UIView(frame: CGRectMake(0, 0, 320, 568))
view.backgroundColor = UIColor.redColor()
controller.view = view
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(160, 284)
label.textAlignment = NSTextAlignment.Center
label.text = "Hello World"
controller.view.addSubview(label)
self.window!.rootViewController = controller
self.window!.makeKeyAndVisible()
return true
}
你真的应该在你的视图控制器上实现prefersStatusBarHidden:
Swift 3及更高版本
override var prefersStatusBarHidden: Bool {
return true
}
转到Info.plist并添加两个密钥:
我实际上是自己想出来的。我将添加我的解决方案作为另一种选择。
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
好吧,所以这对我来说是一个问题,因为ios 9不支持上面提到的方法,如UIApplication.sharedApplication().statusBarHidden = true
或
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
和
override func prefersStatusBarHidden() -> Bool {
return true
}
有效,但不提供可编程的解决方案,我可以改变条件。 (正如我们之前所做的那样,statusBarHidden = true
和statusBarHidden = false
)。
解决这个疯狂:
通过添加到prefersStatusBarHidden()
,如下所示,您可以通过编程方式控制隐藏和显示状态栏,而无需在info.plist中添加UIViewControllerBasedStatusBarAppearance
设置:
var showStatusBar = true
override func prefersStatusBarHidden() -> Bool {
if showStatusBar {
return false
}
return true
}
private func showStatusBar(enabled: Bool) {
showStatusBar = enabled
prefersStatusBarHidden()
}
然后在整个代码中使用它:
//Hide Status Bar
showStatusBar(false)
要么
//Show Status Bar
showStatusBar(true)
在Swift 4.2中它现在是一个属性。
override var prefersStatusBarHidden: Bool {
return true
}
只是添加,当覆盖prefersStatusBarHidden
方法或变量时,Info.plist中的View controller-based status bar appearance
必须为YES,否则覆盖将不起作用
在我的情况下,我正在寻找状态栏来隐藏/显示按需;而不是仅在视图加载或消失时。
swift 3.x
//show status bar initially
var showStatusBar = true
//set the parameters
override var prefersStatusBarHidden: Bool {
if showStatusBar == true {
//does not prefer status bar hidden
print("does not prefer status bar hidden")
return false
} else {
//does prefer status bar hidden
print("does prefer status bar hidden")
return true
}
}
//ex: hide status bar and call parameter function again whenever you want
showStatusBar = false
setNeedsStatusBarAppearanceUpdate()
在您的项目常规 - >部署信息 - >状态栏样式中选择隐藏状态栏的复选标记注意: - 它在整个应用程序中隐藏状态栏
一个适合我的解决方案;如果要在加载时隐藏特定视图控制器上的状态栏:
import UIKit
class ViewController: UIViewController {
private var hideStatusBar: Bool = false
override var prefersStatusBarHidden: Bool {
return hideStatusBar
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundcolor = .white
hideStatusBar = true
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
注意:如果在info.plist中将“查看基于控制器的状态栏外观”键设置为“否”,则上述代码不起作用。您应将密钥设置为“YES”或从info.plist中删除它
斯威夫特4
//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false
//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true
对于Swift 4+,请尝试以下代码(在Swift 4.0,4.1 - IOS 10,11上测试):
override var prefersStatusBarHidden: Bool { return true }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// call this func to force preferredStatusBarStyle to be read again.
setNeedsStatusBarAppearanceUpdate()
}
- 转到Info.plist文件
- 将鼠标悬停在其中一行上,将显示一个(+)和( - )按钮。
- 单击加号按钮添加新密钥以大写字母V开头,自动第一个选择将是基于视图控制器的状态栏外观。
- 将其添加为KEY。
- 将VALUE设置为“NO”
- 转到AppDelegate.swift
- 在方法内添加代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { application.statusBarHidden = true return true }
DONE!运行你的应用程序,没有更多的状态栏!
我正在使用Xcode 8.1(8B62),部署目标设置为10.1,我对上面提到的覆盖选项没有太多运气。但是,检查部署信息中的“隐藏状态栏”选项对我来说是个窍门。
我希望这有帮助。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.isStatusBarHidden = true
return true
}
您可以在ViewController
Class
scope
中使用此代码
open override var prefersStatusBarHidden: Bool { return true }
在您的项目 - >常规 - >部署信息中
状态栏样式: -
刚刚标记为隐藏状态栏(iOS 10)
如果您以模态方式呈现视图控制器,请尝试
viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
Swift 5:在主视图控制器或主导航控制器(如果有)中,
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override var prefersStatusBarHidden: Bool {
return false
}
plist中的“查看基于控制器的状态栏外观”必须为YES,否则将不会调用上述代码。
如果要在启动应用程序时隐藏状态栏,则plist中的“状态栏最初隐藏”必须为YES。当屏幕顶部显示额外的蓝条时,这可以防止启动图像失真。
斯威夫特3
在Info.plist
将View controller-based status bar appearance
设为NO
并致电UIApplication.shared.isStatusBarHidden = true
如果你想在按钮上隐藏和恢复状态栏,在显示和解除滑入菜单,弹出窗口等时,你可以使用这种方法: -
要隐藏状态栏: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
要恢复状态栏: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal
如果您更喜欢视觉方法而不是编码,请使用此方法:在您的info.plist
中
只需将View controller-based status bar appearance
添加到NO
和Status bar is initially hidden
作为YES
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true);
navigationController?.navigationBar.hidden = true // for navigation bar hide
UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
iOS 10 / Swift 3.0的更新
不再是一个功能,现在是一个属性......
override var prefersStatusBarHidden: Bool {
return true
}
在Swift 3.x中:
override fu以上是关于如何在Swift iOS应用程序中隐藏状态栏?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用点击手势(iOS8 / Swift)在 pageViewController 上显示/隐藏状态栏
Swift/iOS 8,当 prefersStatusBarHidden() 设置为 true 时,状态栏不隐藏