Animating UIStackView arrangedSubview content size change

╄→尐↘猪︶ㄣ 提交于 2019-12-06 23:57:00

问题


Is it possible to animate an arranged subview when its intrinsic content size changes?

For example, imagine I have an arranged subview, which holds a single UILabel pinned to edges. That label has a small amount of text. New text comes in, which is larger than the previous text. The intrinsic content size of label is now larger.

I would like to be able to animate it like so:

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

The stackview currently "jumps" from the old content size to the new one, ignoring the animation block.

An alternative of course is to manually find out the height of the arranged subview, and animate that constraint. I'd like to avoid that if possible.


回答1:


Found something that works:

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

Does not work:

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

Strange that changing of the intrinsic content size doesn't make the stackView want to need layout though...



来源:https://stackoverflow.com/questions/35365691/animating-uistackview-arrangedsubview-content-size-change

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!