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()
})
})
}