UIStackView 子视图仅在 isHidden 设置为 false 时才动画
Posted
技术标签:
【中文标题】UIStackView 子视图仅在 isHidden 设置为 false 时才动画【英文标题】:UIStackView subviews animating only when isHidden is set to false 【发布时间】:2019-07-25 08:53:30 【问题描述】:我正在尝试在动画块中隐藏/显示UIStackView
的子视图,如下所示:
UIView.animate(withDuration: 0.3)
self.unpairSensorButton.isHidden = isHidden
显示动画效果很好,但是当我尝试隐藏它时,它只是等待动画持续时间然后立即消失。知道为什么吗?
我曾尝试使用 layoutIfNeeded()
并将其放入 DispatchQueue.main.async
块机器人中,但均无济于事。
【问题讨论】:
您预计会发生什么?你预计它会淡出吗? 这是一个垂直的堆栈视图,所以我希望它会出现在与显示相反的动画中。但它只是突然消失了。 我仍然没有得到你想要发生的事情。如果要淡入,请将alpha
设置为 1。如果要使其淡出,请将 alpha
设置为 0。isHidden
不可动画。
当然是动画的。这就是为什么当我将 isHidden 设置为 true 时它会动画。
所以它有效?那你的代码有什么问题?
【参考方案1】:
isHidden
属性本身不可动画。
UIStackView
基本上会在您隐藏某些子视图时更改其内部约束以适应其大小。由于约束是可动画的,您可以这样做:
unpairSensorButton.isHidden = isHidden
UIView.animate(withDuration: 0.3)
self.view.layoutIfNeeded()
在动画块中调用layoutIfNeeded()
将使布局过程动画化。
【讨论】:
这基本上是不正确的,因为 UIStackView 观察者视图并应用动画monosnap.com/file/UyMyLFJESMYLf0Tn8PLjJLGw3X760n以上是关于UIStackView 子视图仅在 isHidden 设置为 false 时才动画的主要内容,如果未能解决你的问题,请参考以下文章