首页 > 解决方案 > UIStackView 子视图仅在 isHidden 设置为 false 时才动画

问题描述

我试图UIStackView在动画块中隐藏/显示我的子视图,如下所示:

UIView.animate(withDuration: 0.3) {
   self.unpairSensorButton.isHidden = isHidden
}

显示动画效果很好,但是当我尝试隐藏它时,它只是等待动画持续时间然后立即消失。知道为什么吗?

我曾尝试使用layoutIfNeeded()并将其放入 DispatchQueue.main.async块机器人中,但均无济于事。

标签: swiftanimationuistackview

解决方案


isHidden属性本身是不可动画的。 UIStackView当您隐藏某些子视图时,基本上会更改其内部约束以适应其大小。由于约束是动画的,你可以这样做:

unpairSensorButton.isHidden = isHidden
UIView.animate(withDuration: 0.3) {
   self.view.layoutIfNeeded()
}

调用layoutIfNeeded()动画块将为布局过程设置动画。


推荐阅读