如何在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:
迅速2
override func prefersStatusBarHidden() -> Bool { return true }
迅速3
override var prefersStatusBarHidden: Bool { return true }
- 转到Info.plist文件
- 将鼠标hover在其中一行上,将显示(+)和( – )button。
- 点击加号button,以大写字母V开始添加新的键入types,自动第一个选项将是基于视图控制器的状态栏外观。
- 将其作为KEY添加。
- 将VALUE值设为“NO”
- 去你AppDelegate.swift
-
在方法中添加代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { application.statusBarHidden = true return true }
DONE! 运行你的应用程序,没有更多的状态栏!
Swift 3
在Info.plist
将View controller-based status bar appearance
为NO
并调用UIApplication.shared.isStatusBarHidden = true
如果您更喜欢使用可视方法而不是编码,请使用以下方法:在您的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
不再是一个function,现在属性…
override var prefersStatusBarHidden: Bool { return true }
所以这里的问题实际上与Swift没有任何关系,而是iOS 7状态栏外观的处理方式。
默认情况下,视图控制器分别控制状态栏在屏幕上的外观。 如果你想使用这种控制状态栏的方法,你可以为任何视图控制器重写以下方法来修改外观:
prefersStatusBarHidden
, preferredStatusBarStyle
, preferredStatusBarAnimation
,
在你的情况下,你只会实现prefersStatusBarHidden
并返回true
。
另一种方法是在应用程序级别控制状态栏的外观。 这似乎是你实际上想要做的(通过设置application.statusBarHidden
)。
为了使这个工作,你需要打开你的应用程序的Info.plist
文件,并添加关键UIViewControllerBasedStatusBarAppearance
,并给它一个值为NO
。
在Swift 3.x中:
override func viewWillAppear(_ animated: Bool) { UIApplication.shared.isStatusBarHidden = true }
我其实是自己想出来的。 我将添加我的解决scheme作为另一种select。
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 }
工作,但不提供可编程的解决scheme,我可以改变一个条件。 ( statusBarHidden = true
, statusBarHidden = false
就像我们以前所做的那样)。
解决这个疯狂:
通过添加到像下面这样的prefersStatusBarHidden()
,您可以以编程方式控制状态栏的隐藏和显示,而无需将UIViewControllerBasedStatusBarAppearance
设置添加到您的info.plist中 :
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)
如果你想暂时隐藏并返回状态栏,你可以使用这个方法:
场景 : – 在GMail的iOS应用程序中,当滑动菜单来自汉堡包图标左侧时,它们隐藏了状态栏。 而当菜单滑回时,他们将带回状态栏。
隐藏状态栏: –
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
要恢复状态栏:
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal
转到您的Info.plist并添加两个密钥:
只要添加,当覆盖prefersStatusBarHidden
方法或variables时,Info.plist中View controller-based status bar appearance
必须为YES,否则覆盖将不起作用
就我而言,我在寻找状态栏来隐藏/显示需求; 而不仅仅是当视图加载或消失时。
迅速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()
我使用的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 }