Rápido cómo esconder el elemento y su espacio

Espero que el título sea claro. Quiero ocultar un elemento (selector de datos en mi caso) y también quiero ocultar su espacio. Entonces probé esto con una animation:

@IBAction func showQnt(sender: AnyObject) { if (self.pickerQnt.alpha == 0.0){ UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.ShowHideTransitionViews, animations: { self.pickerQnt.alpha = 1.0 }, completion: { (finished: Bool) -> Void in //var constH = NSLayoutConstraint(item: self.pickerQnt, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 162) //self.pickerQnt.addConstraint(constH) }) } else { UIView.animateWithDuration(0.2, delay: 0.0, options: UIViewAnimationOptions.ShowHideTransitionViews, animations: { self.pickerQnt.alpha = 0.0 }, completion: { (finished: Bool) -> Void in // CHECK: ?!? constrain to set view height to 0 run time //var constH = NSLayoutConstraint(item: self.pickerQnt, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 0) //self.pickerQnt.addConstraint(constH) }) } } 

También he probado algo como:

 self.pickerQnt.hidden = true 

pero no funciona

Gracias por adelantado.

El uso de la propiedad "oculta" en vistas en Objective-C / Swift de hecho no "queuepsa" el espacio que toma la vista (en oposition a "View.GONE" en Android ).

En su lugar, debe usar Autolayout y una restricción de altura.

Cree una restricción de altura en su file Xib / Storyboard. Dándole la altura deseada. Haga una IBOutlet a esa restricción (ctrl-arrastre desde la Restricción en la list de Restricciones a su file fuente), y luego puede escribir este método

Solución rápida

 var pickerHeightVisible: CGFloat! ... ... func togglePickerViewVisibility(animated: Bool = true) { if pickerHeightConstraint.constant != 0 { pickerHeightVisible = pickerHeightConstraint.constant pickerHeightConstraint.constant = 0 } else { pickerHeightConstraint.constant = pickerHeightVisible } if animated { UIView.animateWithDuration(0.2, animations: { () -> Void in self.view.layoutIfNeeded() }, completion: nil) } else { view.layoutIfNeeded() } } 

Solución Objective-C:

 @property (nonatomic, strong) CGFloat pickerHeightVisible; ... ... - (void)togglePickerViewVisibility:(BOOL)animated { if(pickerHeightConstraint.constant != 0) { pickerHeightVisible = pickerHeightConstraint.constant; pickerHeightConstraint.constant = 0; } else { pickerHeightConstraint.constant = pickerHeightVisible; } if(animated) { [UIView animateWithDuration:0.2 animations:(void (^)(void))animations:^(void) { [self.view layoutIfNeeded]; }]; } else { [self.view layoutIfNeeded]; } } 

DESCARGO DE RESPONSABILIDAD : No he probado ni comstackdo el código anterior, pero te dará una idea de cómo lograrlo.

IMPORTANTE : el código anterior supone que se le otorga a la restricción de altura de la vista del selector un valor mayor que 0 en el guión gráfico / punta.