Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIStackView Hide View Animation

In iOS 11 the behaviour of the hide animation within a UIStackView has changed, but I have been unable to find this documented anywhere.

iOS 10

iOS 10 animation

iOS 11

iOS 11 animation

The code in both is this:

UIView.animate(withDuration: DiscoverHeaderView.animationDuration,                        delay: 0.0,                        usingSpringWithDamping: 0.9,                        initialSpringVelocity: 1,                        options: [],                        animations: {                             clear.isHidden = hideClear                             useMyLocation.isHidden = hideLocation                         },                        completion: nil) 

How do I restore the previous behaviour on iOS 11?

like image 359
Infinity James Avatar asked Sep 20 '17 15:09

Infinity James


People also ask

How do I hide UIStackView?

With the help of UIStackView these operations are too easy on the storyboard. Just change the order by dragging your view to the desired order or hide your view just setting it to hidden.


1 Answers

Just had the same issue. The fix is adding stackView.layoutIfNeeded() inside the animation block. Where stackView is the container of the items you're wishing to hide.

UIView.animate(withDuration: DiscoverHeaderView.animationDuration,                    delay: 0.0,                    usingSpringWithDamping: 0.9,                    initialSpringVelocity: 1,                    options: [],                    animations: {                         clear.isHidden = hideClear                         useMyLocation.isHidden = hideLocation                         stackView.layoutIfNeeded()                     },                    completion: nil) 

Not sure why this is suddenly an issue in iOS 11 but to be fair it has always been the recommended approach.

like image 85
A Springham Avatar answered Oct 06 '22 15:10

A Springham