UIStackView,通过调整动画大小隐藏子视图

Posted

技术标签:

【中文标题】UIStackView,通过调整动画大小隐藏子视图【英文标题】:UIStackView, hiding subview with resizing animation 【发布时间】:2018-06-14 12:34:46 【问题描述】:

我在UIStackView 中看到了here 隐藏/显示子视图的非常流畅的动画。

我尝试在自己的应用程序中重现它,但遇到了问题。

在动画过程中隐藏的视图不会调整大小。它只是等到动画完成然后消失。与上述链接示例中的clear button 相对。

我的代码:

UIView.animate(withDuration: 0.5,
               delay: 0.0,
               usingSpringWithDamping: 0.9,
               initialSpringVelocity: 1,
               options: [],
               animations: 
                    self.acceptDeclineBar.isHidden = !newState
                    self.view.layoutIfNeeded()
                ,
               completion: nil)

问题

UIStackView 是免费提供隐藏/显示调整大小的动画,还是我需要使用高度约束为自己实现它?

【问题讨论】:

您的视图 (self.acceptDeclineBar) 将在动画完成时隐藏。尝试在动画之前隐藏。 self.acceptDeclineBar.isHidden = !newState UIView.animate(withDuration: 0.5, delay: 0.0, usingSpringWithDamping: 0.9, initialSpringVelocity: 1, options: [], animations: self.view.layoutIfNeeded() , completion: nil) 看起来更好,但 acceptDeclineBar 仍然没有像 clear button 那样从我的目标调整大小。 检查按钮超级视图的删除底部约束。 【参考方案1】:

您的视图(self.acceptDeclineBar) 将在动画完成时隐藏。尝试在动画之前隐藏。

self.acceptDeclineBar.isHidden = !newState

 UIView.animate(withDuration: 0.3) [weak self]
                    self?.view.layoutIfNeeded()

或者你可以使用高度约束来代替隐藏

acceptDeclineBarHeightConstraint.constant = newState ? 60 (whatever Visbale size) : 0 (Hide)
 UIView.animate(withDuration: 0.3) [weak self]
                    self?.view.layoutIfNeeded()

【讨论】:

更改HeightConstraint 是显而易见的想法,我认为UIStackView 可以免费调整大小:/ 检查按钮超级视图的删除底部约束。

以上是关于UIStackView,通过调整动画大小隐藏子视图的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView 显示/隐藏动画无法正常工作

为啥 UIStackView 调整排列的子视图的大小?

如何在 Xcode 中调整 UIStackView 的子视图大小?

当 UIStackView 更改其排列的子视图时,UITableViewCell 不会调整大小

UIStackView 子视图仅在 isHidden 设置为 false 时才动画

如何正确地为隐藏在 UITableViewCell 中的 UIStackView 设置动画?