如何在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并添加两个密钥:

Go to your Info.plist and add two Keys:

另一答案

我实际上是自己想出来的。我将添加我的解决方案作为另一种选择。

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 = truestatusBarHidden = 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()
}
另一答案
  1. 转到Info.plist文件
  2. 将鼠标悬停在其中一行上,将显示一个(+)和( - )按钮。
  3. 单击加号按钮添加新密钥以大写字母V开头,自动第一个选择将是基于视图控制器的状态栏外观。
  4. 将其添加为KEY。
  5. 将VALUE设置为“NO”
  6. 转到AppDelegate.swift
  7. 在方法内添加代码 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { application.statusBarHidden = true return true }

DONE!运行你的应用程序,没有更多的状态栏!

另一答案

我正在使用Xcode 8.1(8B62),部署目标设置为10.1,我对上面提到的覆盖选项没有太多运气。但是,检查部署信息中的“隐藏状态栏”选项对我来说是个窍门。

Project > General

我希望这有帮助。

另一答案
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.plistView controller-based status bar appearance设为NO

并致电UIApplication.shared.isStatusBarHidden = true

另一答案

如果你想在按钮上隐藏和恢复状态栏,在显示和解除滑入菜单,弹出窗口等时,你可以使用这种方法: -

要隐藏状态栏: -

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

要恢复状态栏: -

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 
另一答案

如果您更喜欢视觉方法而不是编码,请使用此方法:在您的info.plist

enter image description here只需将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 时,状态栏不隐藏

隐藏导航栏时隐藏状态栏 - SWIFT iOS8

Swift iOS - 即使我隐藏它,导航栏也不会保持隐藏状态

如何在swift中逐渐隐藏状态栏

Swift如何在IOS中隐藏运营商,时间和电池[重复]