UILabel numberOfLines 随动画变化

Posted

技术标签:

【中文标题】UILabel numberOfLines 随动画变化【英文标题】:UILabel numberOfLines change with animation 【发布时间】:2018-12-12 01:01:57 【问题描述】:

我在UIStackView 内有一个UILabel,而堆栈视图在另一个UIScrollView 内,我正在使用自动布局。标签有单行(即numberOfLines 等于 1),在少数情况下,我需要将其设置为多行(即numberOfLines 等于 0)并带有扩展它的动画。

func expand() 
    label.numberOfLines = 0

当我点击展开时:

messageView.expand()
UIView.animate(withDuration: 0.3) 
    self.layoutIfNeeded()

但是,当它展开时,标签的框架没有更新,我必须滚动(滚动视图)以使其完全可见。有什么问题?

谢谢!

【问题讨论】:

“标签的框架没有更新”,你的意思是它没有扩展? @KarthickRamesh 是的,它没有扩展 可以为messageview添加自动布局约束吗? 【参考方案1】:
    您是否更改了标签的文本? 检查自动布局是否正确

【讨论】:

是的,我将标签文本从单个单词更改为长句,并将其 numberOfLines 从 1 更改为 0。 @rocoo 请使用 cmets 获取此类建议。答案应该为问题提供有效的解决方案。 在我的情况下,问题是由于限制。【参考方案2】:

UILabel 的动画无法在其中执行 UIView.animate(withDuration:). 这应该有效:

    UIView.transition(with: label, duration: 0.5, options: .transitionCrossDissolve, animations: 
         self.label.numberOfLines = 0
    )

您可以试验选项和执行块。

【讨论】:

以上是关于UILabel numberOfLines 随动画变化的主要内容,如果未能解决你的问题,请参考以下文章

numberOfLines=2 的 UILabel 使用啥约束高度? (使用 [NSString sizeWithFont...])

UILabel 的 numberOfLines 在单元格中不起作用

使用 ForEach 插入的 SwiftUI 视图未随动画更新

UILabel numberoflines 和 font size 在缩小时自动设置

解决Unity中模型部件的MeshCollider不随动画一起运动的问题

Android layer type与WebView白屏以及WebView不随动画而动的问题