1. ホーム
  2. ios

[解決済み] UIStackView Hide View アニメーション

2022-12-02 06:12:24

質問

iOS 11では、非表示アニメーションの動作が UIStackView 内の非表示アニメーションの動作が変更されましたが、これがどこにも文書化されていないのです。

iOS 10

iOS 11

どちらもコードはこうなっています。

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

iOS 11で以前の動作に戻すにはどうすればよいですか?

どのように解決するのですか?

ちょうど同じ問題がありました。 修正方法は stackView.layoutIfNeeded() をアニメーションブロックの中に追加することです。ここで stackView は、隠したいアイテムのコンテナです。

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)

なぜこれが iOS 11 で突然問題になったのかは不明ですが、公平を期すために、これは常に推奨される方法でした。