如何扩展和折叠UILabel?

时间:2017-06-02 13:38:45

标签: ios swift animation uilabel

所以我试图构建一个小扩展并折叠UILabel,就像你在下面看到的那样。它下面还会有一些文字。当您触摸标题时,它应该显示更少的文本。

据我所知,我可以将文本标签的行数设置为零,它将计算显示整个文本所需的高度。我最初的方法是将行数从零改为三,然后我做类似下面的代码...

    `UIView.animate(withDuration: 0.4) {
        self.body.superview?.layoutIfNeeded()
    }`

这在技术上有效,但动画看起来很糟糕。由于缺乏更好的单词,它看起来很神奇,所以我认为我可能不得不为高度设置动画。那么如果我不知道文本需要多长时间,我怎样才能真正计算出文本所需的高度?我可以设置从65(任意数字)到任何高度所需的高度的动画。

enter image description here

2 个答案:

答案 0 :(得分:1)

是的,你可以。您需要为高度设置约束并更改它的常量,(或者您可以设置2个约束并更改优先级,只需确保优先级不是0到1000,但是1和999.您无法更改它们除此以外)。在动画块之前执行此操作并保持不变。

我有一个允许你从故事板中完成99%的窗格

https://github.com/fer662/FMConstraintSwitch

您在故事板上放置FMStateConstraintSwitch,设置约束的出口以及需要布局的父视图。然后从您的代码中,您只需更改FMStateConstraintSwitch上的状态。它可以为每个状态切换多个约束。

答案 1 :(得分:0)

简单方法:

创建内部带有两个标签的StackView。标题的第一个标签,文本的第二个标签 - 默认隐藏。

现在点击操作就行了:

UIView.animate(withDuration: 0.5) { 
    self.textLabel.isHidden = false
}

使用StackView,动画是免费的:)