当所有子视图隐藏在动画块

时间:2016-10-17 14:00:30

标签: ios swift uistackview

如果我尝试隐藏堆栈视图的所有子视图的动画,我可以看到它们向左上角移动。在展示时,它们的动画从左上角到适当的空间。 如果我只隐藏已排列视图的子集,则会按预期动画。

我目前的解决方法是在堆栈中保留一个不可见的子视图,但这非常难以理解。

我正在通过

隐藏
UIView.animate(withDuration: 0.5) {                
    self.someStack.arrangedSubviews.forEach { $0.isHidden = !$0.isHidden 
}

2 个答案:

答案 0 :(得分:1)

我遇到了一个非常类似的问题,经过几个小时的来回,我发现调用self.view.layoutIfNeeded()解决了这个问题。

我的等级:

- UIView - UIStackView - UIStackView(1) - UIButton - UIButton - UIStackView(2) - UITextField - UIButton - UIActivityIndicatorView

根据UIView中对UITextField.becomeFirstResponder()的调用,当键盘出现时,根目录(2)UIStackView 动画从底部开始。默认情况下,隐藏(2)UIStackView的每个子视图。根据{{​​1}}更改,应用会调用UISegmentedControl并隐藏UITextField.becomeFirstResponder()并显示(1)UIStackView。如果我在(2)UIStackView之后没有打self.view.layoutIfNeeded()来显示stackView.subviews.forEach { $0.isHidden = false }的子视图,我会看到它们从设备的左上角动画。

我不知道这是否对您有所帮助,但这可能是调查的起点。

答案 1 :(得分:0)

尝试在堆栈视图中添加其他空视图(宽度/高度0)。这为我解决了这个问题。