我想移除屏幕顶部的状态栏。

这行不通:

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
}

其他回答

在我的情况下,我正在寻找状态栏隐藏/显示的需求;而不是只在视图加载或消失的时候。

快3.倍

//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()
 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true);
    navigationController?.navigationBar.hidden = true // for navigation bar hide
    UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}

斯威夫特 5+

在我的例子中,我需要根据某些条件更新隐藏的状态栏。

因此,我创建了一个包含新属性hideStatusBar的基本控制器BaseViewController。

其他视图控制器是这个基控制器的子类。最后,当我想要更新状态栏行为时,我只需要更改这个hideStatusBar值。

class BaseViewController: UIViewController {

    var hideStatusBar: Bool = false {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
           return hideStatusBar
    }
}

如何使用

final class ViewController: BaseViewController, UIScrollViewDelegate {
    let scrollView = UIScrollView()

    ...

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        UIView.animate(withDuration: 0.3) {
            if scrollView.contentOffset.y > 100 {
                self.hideStatusBar = true
            } else {
                self.hideStatusBar = false
            }
        }
    }
}

Demo

这是一个演示,我使用UIView.animate(…)使过渡更流畅。

Go to Info.plist file Hover on one of those lines and a (+) and (-) button will show up. Click the plus button to add new key Type in start with capital V and automatically the first choice will be View controller-based status bar appearance. Add that as the KEY. Set the VALUE to "NO" Go to you AppDelegate.swift Add the code, inside the method func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { application.statusBarHidden = true return true }

完成了!运行您的应用程序,没有更多的状态栏!

这对我来说是个问题,因为iOS 9不支持上面提到的任何方法,比如UIApplication.sharedApplication()。statusBarHidden = true 或

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)

and

override func prefersStatusBarHidden() -> Bool {
     return true
}

工作,但不提供可编程的解决方案,我可以改变的条件。 (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)

OR

//Show Status Bar
showStatusBar(true)