2017-06-02 186 views
0

所以我试图建立一个像你看到下面的一个小扩展和崩溃UILabel。下面还会有一些文字。当你触摸标题时,它应该会显示更少的文字。如何展开和折叠UILabel?

我知道我可以将文本标签的行数设置为零,并且它会计算出需要显示整个文本的高度。我最初的做法是更改的行数从零到说三,然后我做类似下面的代码...

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

这种技术的工作原理,但动画看起来很可怕。它看起来很缺乏更好的单词,所以我认为我可能必须改变高度的动画。那么如果我不知道它会持续多长时间,我怎么才能真正计算出文本所需的高度呢?我可以将65的高度(某些任意数字)的高度设置为任何需要的高度。

enter image description here

+0

不完全相同,但您可能会从中找到一些帮助:https://stackoverflow.com/questions/43096231/expand-uilabel-inside-uitableview-with-more-button-like-instagram/43096940 #43096940 – DonMag

回答

0

最简单的办法:

里面两个标签创建StackView。标题的第一个标签,文本的第二个标签 - 默认隐藏。

现在自来水的行动只是这样做:

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

随着StackView动画是免费的:)

+0

是的,但我只是试图缩短文本不隐藏它完成,但这是否是一个相当优雅的解决方案。 – user3832583

1

是的,可以。您需要为高度设置约束条件并将其更改为常量(或者您可以设置2个约束条件并更改优先级,只要确保优先级不是0,1000,而是1和999)。否则,您不能更改它们。在动画块之前执行并保持原样。

我有一个吊舱,可以让你从故事板

https://github.com/fer662/FMConstraintSwitch

做的这个99%你有你的故事板掉落FMStateConstraintSwitch,设置了限制出口,这点需要父视图被布置。然后从你的代码中改变FMStateConstraintSwitch的状态。它可以为每个状态切换多于1个约束。

+0

好吧,但如果我在UILabel上设置一个约束,我不知道它会是怎样的大小,它将如何工作? – user3832583

+0

如果要进行的转换是将标签封装到任意大小,而另一个状态是其固有高度,则只需为999的优先级设置任意大小的一个约束(例如:60)。当您将其优先级更改为1并设置为动画时,内在大小将会接管。 –

+0

这是行不通的,我认为这很有帮助,但动画仍然是如此波涛汹涌。任何想法如何让这看起来更好一点?我可能会更新我现在作为gif所拥有的问题,以便看到它的样子。 – user3832583