如果我尝试隐藏堆栈视图的所有子视图的动画,我可以看到它们向左上角移动。在展示时,它们的动画从左上角到适当的空间。 如果我只隐藏已排列视图的子集,则会按预期动画。
我目前的解决方法是在堆栈中保留一个不可见的子视图,但这非常难以理解。
我正在通过
隐藏UIView.animate(withDuration: 0.5) {
self.someStack.arrangedSubviews.forEach { $0.isHidden = !$0.isHidden
}
答案 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)。这为我解决了这个问题。