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

Adi*_*rma 25 statusbar navbar swift

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

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

编辑:我想隐藏并显示状态栏和导航栏,而不是永久隐藏它.

Ima*_*tit 114

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


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

自iOS 8起,UINavigationController就拥有了一个hidesBarsOnTap属性.hidesBarsOnTap有以下声明:

var hidesBarsOnTap: Bool { get set }
Run Code Online (Sandbox Code Playgroud)

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

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
    }

}
Run Code Online (Sandbox Code Playgroud)

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

UINavigationController有一个叫做的方法setNavigationBarHidden(_:animated:).setNavigationBarHidden(_:animated:)有以下声明:

func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
Run Code Online (Sandbox Code Playgroud)

设置是否隐藏导航栏.

以下代码显示如何通过使用Storyboard中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
    }

}
Run Code Online (Sandbox Code Playgroud)

#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
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您需要定位iOS 10,请参阅此答案以获取类似问题.

  • 当使用`prefersStatusBarHidden()`和导航栏的可见性时,**导航栏**在隐藏时不会动画(滑动),但在显示时仍会为幻灯片设置动画.还没找到办法解决这个问题. (5认同)
  • 非常令人印象深刻.我非常喜欢这个.对我来说工作得很好 (2认同)
  • @rohaldb我有同样的问题,你找到了解决方案吗?编辑:解决方案是使用`automaticAdjustsScrollViewInsets = false` (2认同)