当所有子视图隐藏在动画块中时,UIStackView将其排列的子视图移动到左上角

Мор*_*орт 5 ios swift uistackview

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

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

我在躲藏

UIView.animate(withDuration: 0.5) {                
    self.someStack.arrangedSubviews.forEach { $0.isHidden = !$0.isHidden 
}
Run Code Online (Sandbox Code Playgroud)

Xav*_*oll 3

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

我的层次结构:

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

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

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