我有一个UILabel,listDescription,它以5行显示。它从数据库中攫取大量文本,并且总数不确定。我已经实现了“显示更多”按钮,按下后,它将展开以显示整个内容。我已经得到它工作正常,但我希望为高度变化添加动画。动画更改UILabel行数
我的代码:
@IBAction func toggleDesc(sender: AnyObject) {
if (self.listDescription.numberOfLines>0)
{
self.listDescription.numberOfLines=0
self.showMoreBtn.setTitle("Show Less", forState: UIControlState.Normal)
}
else
{
self.listDescription.numberOfLines=5
self.showMoreBtn.setTitle("Show More", forState: UIControlState.Normal)
}
}
我已经试过包裹numberOfLines在UIView.animateWithDuration变化,但这种变化仍是瞬间完成的。
我最好的猜测是将标签放在视图中,禁止从该视图溢出,扩大行数,抓住标签的新(未显示)高度,并增加视图的大小。但是我不知道在另一个方向做什么,因为在“轻量级显示”被点击时缩小它。
我很乐意提出建议,并且会做一些自己的尝试。 [编辑:所以,我最初担心,如果我替换显式numberOfLines设置,并刚刚引入高度约束,文本将不会在最后截断(如果它太长),但它似乎这样做很好。
这就是说,能够设置行数而不是高度是很方便的,因为我希望它在多个设备上看起来一致,即使在我基于屏幕尺寸实现自动字体大小调整后,对于平板电脑等。
这可能是以后的考虑。我在标签上有一个高度限制,我希望如果我删除约束并将其包含在某些动画代码中,它将调整为其全尺寸。但是,我仍然不能完全明白代码的正确性。]
看一看这个问题。看起来好像'numberOfLines'不是可动画的。 http://stackoverflow.com/questions/20958175/ios-animating-uilabel-expand –
啊。其中的一些信息和背后的想法绝对有帮助,虽然他们提供的示例/解决方案似乎在Objective C中,而不是Swift。 – MikeOShay
我从中学习到,如果给标签赋予高度约束,并且numberOfLines设置为0,它将保持在该高度并仍然截断文本的尾部(如果这是属性中的设置)。所以这是我的一个担忧,但仍然存在动画问题。 现在我很好奇,如果有一种方法可以删除高度限制并将调整动画设置为适当的全高。 – MikeOShay