ios swift ios9 statusbar

setStatusBarHidden(_: withAnimation:) obsoleto en iOS 9



swift ios9 (5)

Consulte preferredStatusBarUpdateAnimation ,

Gif

Código

class ViewController: UIViewController { var isHidden:Bool = false{ didSet{ UIView.animate(withDuration: 0.5) { () -> Void in self.setNeedsStatusBarAppearanceUpdate() } } } @IBAction func clicked(sender: AnyObject) { isHidden = !isHidden } override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{ return .slide } override var prefersStatusBarHidden: Bool{ return isHidden } }

Veo que en iOS 9 setStatusBarHidden(_:withAnimation:) ahora está en desuso y la documentación dice que use [UIViewController prefersStatusBarHidden] pero ¿cuál es la alternativa en iOS 9 si aún quiero ocultar la barra de estado con una animación de diapositivas?


He limpiado un poco la increíble respuesta de Leo moviendo la actualización a didSet (sintaxis de Swift 3 ).

class ViewController: UIViewController { @IBAction func clicked(sender: AnyObject) { statusBarHidden = !statusBarHidden } var statusBarHidden = false { didSet { UIView.animate(withDuration: 0.5) { () -> Void in self.setNeedsStatusBarAppearanceUpdate() } } } override var prefersStatusBarHidden: Bool { return statusBarHidden } override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { return .slide } }


si está codificando con el objetivo c, aquí está la solución:) (Versión del objetivo C de Leo: ¡gracias, hombre!)

declarar una variable

bool isHidden; isHidden = false;//in viewDidload()

y luego agrega este código cuando quieras ocultar la barra de estado

isHidden = true; [UIView animateWithDuration:0.6 animations:^{ [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; }];

después de eso agrega este dos método

-(UIStatusBarAnimation) preferredStatusBarUpdateAnimation { return UIStatusBarAnimationFade; } -(BOOL) prefersStatusBarHidden { return isHidden;}

Espero que tu problema se resuelva (sonrisa)


Swift 3

  • Las variables calculadas han reemplazado algunas funciones
  • La función animada tiene sintaxis actualizada

class ViewController: UIViewController { var isHidden:Bool = false @IBAction func clicked(sender: AnyObject) { isHidden = !isHidden UIView.animate(withDuration: 0.5) { () -> Void in self.setNeedsStatusBarAppearanceUpdate() } } override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { return UIStatusBarAnimation.slide } override var prefersStatusBarHidden: Bool { return isHidden } }


  • SWIFT 3 ALTERNATIVE

Hola chicos, encontramos una manera mucho más ordenada de hacer esto para Swift 3, usando un emparejamiento var privado con cada una de las anulaciones. Mi publicación original: https://.com/a/42083459/7183483

pero aquí está lo esencial:

Aquí hay un fragmento:

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get { return .slide } } private var statusBarStyle : UIStatusBarStyle = .default override var preferredStatusBarStyle: UIStatusBarStyle { get { return statusBarStyle } } private var statusBarStatus : Bool = false override var prefersStatusBarHidden: Bool { get { return statusBarStatus } }

que luego podría llamar en una función como esta: (este es uno de mis ejemplos, por lo tanto, desestime la función personalizada).

func sliderView(sliderView: SliderView, didSlideToPlace: CGFloat, within: CGFloat) { let val = (within - (didSlideToPlace - sliderView.upCent))/(within) print(val) //Where you would change the private variable for the color, for example. if val > 0.5 { statusBarStyle = .lightContent } else { statusBarStyle = .default } UIView.animate(withDuration: 0.5, animations: { sliderView.top.backgroundColor = UIColor.black.withAlphaComponent(val) self.coverLayer.alpha = val self.scroll.backgroundColor = colors.lightBlueMainColor.withAlphaComponent(val) }, completion: { value in //If you do not call setNeedsStatusBarAppearanceUpdate() in an animation block, the animation variable won''t be called it seems. UIView.animate(withDuration: 0.4, animations: { self.animating = true //Where you set the status for the bar (your part of the solution) self.statusBarStatus = false //Then you call for the refresh self.setNeedsStatusBarAppearanceUpdate() }) }) }