swift - reducir - ocultar iconos de la barra de estado android
cómo ocultar la barra de estado y la barra de navegación cuando toca el dispositivo (2)
Con Swift 4 y iOS 11, según sus necesidades, puede seleccionar uno de los tres fragmentos de código siguientes para resolver su problema.
# 1. Uso de la propiedad de UINavigationController
hidesBarsOnTap
+ UIViewController
prefersStatusBarHidden
y preferredStatusBarUpdateAnimation
properties
Desde iOS 8, UINavigationController
tiene una propiedad hidesBarsOnTap
. hidesBarsOnTap
tiene la siguiente declaration :
var hidesBarsOnTap: Bool { get set }
Un valor booleano que indica si el controlador de navegación permite ocultar sus barras mediante un gesto de toque.
Apple también dice acerca de hidesBarsOnTap
:
Cuando el valor de esta propiedad es
true
, el controlador de navegación alterna la ocultación y la visualización de su barra de navegación y barra de herramientas en respuesta a un toque no manejado en el área de contenido. El valor predeterminado de esta propiedad esfalse
.
El siguiente código muestra cómo implementar 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. Usando UINavigationController
setNavigationBarHidden(_:animated:)
method + UIViewController
prefersStatusBarHidden
y preferredStatusBarUpdateAnimation
propiedades con un UIButton
UINavigationController
tiene un método llamado setNavigationBarHidden(_:animated:)
. setNavigationBarHidden(_:animated:)
tiene la siguiente declaration :
func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
Establece si la barra de navegación está oculta.
El siguiente código muestra cómo alternar la barra de estado y la barra de navegación usando setNavigationBarHidden(_:animated:)
con un UIButton
establecido en el Guión gráfico y vinculado a una @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. Usando UINavigationController
setNavigationBarHidden(_:animated:)
method + UIViewController
prefersStatusBarHidden
y preferredStatusBarUpdateAnimation
propiedades con un UIGestureRecognizer
Como alternativa al código anterior, puede usar setNavigationBarHidden(_:animated:)
con un UIGestureRecognizer
lugar de un 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
}
}
Vea esta respuesta para una pregunta similar si necesita apuntar a iOS 10.
¿Cómo ocultar la barra de estado y la barra de navegación cuando toco el dispositivo como fotos en el iPhone? Yo habia usado
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)
pero no está funcionando
Edición : me gustaría ocultar y mostrar la barra de estado y la barra de navegación, no ocultarla permanentemente.
En iOS 8 y superior, simplemente puedes usar hidesBarsOnTap :
navigationController?.hidesBarsOnTap = true