i hope that title was clear. I want to hide an element (data picker in my case) and also i want to hide his space. So i tried this with an 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)
})
}
}
I've also tried something like:
self.pickerQnt.hidden = true
but wont work.
Thanks in advance.
Using the "hidden" property on views in Objective-C/Swift does as a matter of fact not "collapse" the space the view is taking (as opposed to "View.GONE" in Android).
Instead you should use Autolayout and a Height constraint.
Create a Height constraint in your Xib/Storyboard file. Giving it the wished height. Make an IBOutlet to that constraint (ctrl-drag from the Constraint in the Constraints list to your source file), and then you can write this method
Swift solution
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()
}
}
Objective-C solution:
@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];
}
}
DISCLAIMER: I have not tested nor compiled the code above, but it will give you an idea of how to achieve it.
IMPORTANT: The code above assumes that you give the height constraint of the picker view a value greater than 0 in the storyboard/nib.