点击设备时如何隐藏状态栏和导航栏

时间:2014-10-09 08:25:38

标签: swift navbar statusbar

当我点击iPhone中的照片等设备时,如何隐藏状态栏和导航栏? 我用过

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)

但它不起作用。

修改:我想隐藏并显示状态栏和导航栏,而不是永久隐藏它。

3 个答案:

答案 0 :(得分:112)

根据您的需要,使用Swift 4和iOS 11,您可以选择以下三个代码段中的一个来解决您的问题。


#1。使用UINavigationController hidesBarsOnTap属性+ UIViewController prefersStatusBarHiddenpreferredStatusBarUpdateAnimation属性

自iOS 8起,UINavigationController具有hidesBarsOnTap属性。 hidesBarsOnTap具有以下declaration

var hidesBarsOnTap: Bool { get set }
  

一个布尔值,指示导航控制器是否允许使用轻击手势隐藏其条形图。

Apple还说明了hidesBarsOnTap

  

当此属性的值为true时,导航控制器会切换其导航栏和工具栏的隐藏和显示,以响应内容区域中未处理的点击。此属性的默认值为false

以下代码显示了如何实现hidesBarsOnTap

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.hidesBarsOnTap = true
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

#2。使用UINavigationController setNavigationBarHidden(_:animated:)方法+ UIViewController prefersStatusBarHiddenpreferredStatusBarUpdateAnimation属性UIButton

UINavigationController有一个名为setNavigationBarHidden(_:animated:)的方法。 setNavigationBarHidden(_:animated:)具有以下declaration

func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
  

设置是否隐藏导航栏。

以下代码显示如何使用setNavigationBarHidden(_:animated:)在故事板中设置UIButton并链接到@IBAction来切换状态栏和导航栏:

import UIKit

class ViewController: UIViewController {

    // Link this @IBAction to a `UIButton`
    @IBAction func toggle(_ sender: UIButton) {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

#3。使用UINavigationController setNavigationBarHidden(_:animated:)方法+ UIViewController prefersStatusBarHiddenpreferredStatusBarUpdateAnimation属性UIGestureRecognizer

作为上一代码的替代方案,您可以setNavigationBarHidden(_:animated:)使用UIGestureRecognizer代替UIButton

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.toggle))
        view.isUserInteractionEnabled = true
        view.addGestureRecognizer(gesture)
    }

    @objc func toggle() {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

如果您需要定位iOS 10,请参阅此answer for a similar question

答案 1 :(得分:0)

在iOS 8及更高版本上,您只需使用hidesBarsOnTap

即可
    navigationController?.hidesBarsOnTap = true

答案 2 :(得分:0)

令人震惊的是,这个问题在 6 年后仍然存在。我已按照 this answer 中的描述提交了一个错误。您最好的选择是使用问题中提到的 OP 旧的(在 iOS 9 中已弃用)API,并结合 UINavigationController.setNavigationBarHidden()。或者你牺牲了动画。