动画UIStackView arrangeSubview内容大小更改

时间:2016-02-12 14:59:38

标签: ios autolayout uistackview

当内部内容大小发生变化时,是否可以为已排列的子视图设置动画?

例如,假设我有一个排列的子视图,它包含一个固定到边缘的UILabel。该标签有少量文字。新文本进来,比前一个文本大。标签的内在内容大小现在更大。

我希望能够像这样制作动画:

 stackView.layoutIfNeeded()
 self.label.text = self.expanded ? textTwo : textOne
 UIView.animateWithDuration(0.3) { () -> Void in
     self.stackView.layoutIfNeeded()
 }

目前的堆栈视图"跳跃"从旧内容大小到新内容大小,忽略动画块。

当然,另一种方法是手动找出排列的子视图的高度,并为该约束设置动画。如果可能,我想避免这种情况。

1 个答案:

答案 0 :(得分:4)

找到有用的东西:

label.text = expanded ? textOne : textTwo
UIView.animateWithDuration(0.4) { () -> Void in
    self.stackView.setNeedsLayout()
    self.stackView.layoutIfNeeded()
}

不起作用:

label.text = expanded ? textOne : textTwo
UIView.animateWithDuration(0.4) { () -> Void in
    self.stackView.layoutIfNeeded()
}

奇怪的是,更改内在内容大小并不会使stackView想要布局......但