使用内部的 UILabel 自动调整 UIView 的大小,顺利

Autoresizing UIView with UILabel inside, smoothly

我有一个 UIView,里面有一个 UILabel(没有别的)。我希望扩展和收缩视图,使其看起来好像标签正在扩展和收缩(通过点击按钮)。我在视图的高度上使用 NSLayoutConstraint

func labelExpansion() {
    if (isExpanded) {
        myViewConstraint.constant = shortLabelHeight
    } else {
        myViewConstraint.constant = longLabelHeight
    }
    UIView.animate(withDuration: 2.2, animations: {
        self.view.layoutIfNeeded()
    })
}

问题是,标签中的文本看起来像 'jumps'。随着标签的大小调整,文本的位置发生变化,直到动画结束,此时标签正确地重新绘制到视图的顶部。

我也试过去掉环景,单独调整label的高度约束;那同样令人不安。

如何在动画过程中停止这种跳转,并将标签的顶部固定到视图的顶部?

尝试了几次之后,我找到了一个简单的解决方案:将 UILabel 的内容模式设置为 'Top'。

myLabel.contentMode = .top