UILabel 在添加文本时反弹
Posted
技术标签:
【中文标题】UILabel 在添加文本时反弹【英文标题】:UILabel bounces as text is added 【发布时间】:2014-10-30 19:43:38 【问题描述】:文本以编程方式添加到 UILabel。随着更多文本的添加,文本会换行并增加标签的高度。
问题是,当文本在一行的末尾换行时,整个标签会跳到 1 行的高度,并动画自己回到正确的位置。最终结果很好,但是你如何摆脱奇怪的跳跃动画。同样,每次 UILabel 的高度由于另一个换行而增加时都会发生这种情况。
示例代码:
var eventCount = 0;
func someEvent(sender:AnyObject)
eventCount += 1;
if(eventCount == 1)
lbl.text = "this"
else if(eventCount == 2)
lbl.text = "this is some"
else if(eventCount == 3)
lbl.text = "this is some sample text"
else if(eventCount == 4)
// this is where text wraps to line 2
// the label jumps up 20px or so and
// animates back down to it's original position
lbl.text = "this is some sample text that causes the label to wrap"
自动布局约束
0
|
0 - UILabel - 0
标签属性
lines = 0
【问题讨论】:
添加示例代码;感谢您的观看! 您在添加文本时尝试过[self.view layoutIfNeeded]
吗?
是的,之前、之后和两者都试过。还是一样的效果。
我无法复制这个 - 你能提供更多信息吗?什么版本的 Xcode?什么是视图层次结构?还有其他非默认属性吗?
你能添加你的约束设置代码吗?
【参考方案1】:
我已经设法用下面的代码重现了这个问题:
class ViewController: UIViewController
@IBOutlet weak var label: UILabel!
@IBAction func buttonPushed(sender: AnyObject)
UIView.animateWithDuration(0.5)
self.someEvent(self)
self.view.layoutIfNeeded()
func someEvent(sender:AnyObject)
self.label.text! += " test"
所以,我相信您的 someEvent()
在动画块中被调用。
UIView.performWithoutAnimation
解决了这个问题。
var eventCount = 0;
func someEvent(sender:AnyObject)
UIView.performWithoutAnimation
self.eventCount += 1;
if(self.eventCount == 1)
self.lbl.text = "this"
else if(self.eventCount == 2)
self.lbl.text = "this is some"
else if(self.eventCount == 3)
self.lbl.text = "this is some sample text"
else if(self.eventCount == 4)
self.lbl.text = "this is some sample text that causes the label to wrap"
self.view.layoutIfNeeded()
【讨论】:
+1 非常感谢您花时间重现此内容。奇怪的是,该错误自行清除了,因此它可能是一个间歇性问题。它现在在我的复杂屏幕和简单测试用例上都可以正常工作。不涉及动画块,但如果没有提供有关此错误的其他见解,我会给你赏金。再次感谢!以上是关于UILabel 在添加文本时反弹的主要内容,如果未能解决你的问题,请参考以下文章
更改 UILabel 的文本使其在使用 UIViewKeyframeAnimations 时重新出现
adjustsFontSizeToFitWidth 时 UILabel 的裁剪
UILabel 子类 - 尽管标签高度正确,但文本在底部被截断