当我点击iPhone中的照片等设备时,如何隐藏状态栏和导航栏? 我用过
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)
但它不起作用。
修改:我想隐藏并显示状态栏和导航栏,而不是永久隐藏它。
答案 0 :(得分:112)
根据您的需要,使用Swift 4和iOS 11,您可以选择以下三个代码段中的一个来解决您的问题。
UINavigationController
hidesBarsOnTap
属性+ UIViewController
prefersStatusBarHidden
和preferredStatusBarUpdateAnimation
属性自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
}
}
UINavigationController
setNavigationBarHidden(_:animated:)
方法+ UIViewController
prefersStatusBarHidden
和preferredStatusBarUpdateAnimation
属性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
}
}
UINavigationController
setNavigationBarHidden(_:animated:)
方法+ UIViewController
prefersStatusBarHidden
和preferredStatusBarUpdateAnimation
属性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()
。或者你牺牲了动画。