Cocoa - iOS - 更新 UILabel 的文本属性是不是需要 setNeedsDisplay?
Posted
技术标签:
【中文标题】Cocoa - iOS - 更新 UILabel 的文本属性是不是需要 setNeedsDisplay?【英文标题】:Cocoa - iOS -Does updating the text property of a UILabel require setNeedsDisplay?Cocoa - iOS - 更新 UILabel 的文本属性是否需要 setNeedsDisplay? 【发布时间】:2012-02-23 20:31:39 【问题描述】:我是新手,我有一个 ios 项目,我在其中设置 UILabel 字段的文本属性。
self.nameLabel.text = @"abcd";
问题
是否需要为要显示的新文本值的标签调用 setNeedsDisplayInRect ?我的理解基于一些测试:
在不调用 setNeedsDisplayInRect 的情况下,标签的文本已更新, 但我想知道这是巧合还是保证标签会在不显式调用 setNeedsDisplay 的情况下显示新值谢谢
【问题讨论】:
【参考方案1】:当您设置text
属性时,UILabel
将完成更新所需的一切工作。其他属性也一样(font
、textColor
等)。您唯一需要手动执行的操作(如果您不使用 IB)就是设置frame
。
【讨论】:
非常感谢您的及时回答,我对您所说的有一个疑问。只是为了澄清如果您在代码中设置框架,那么您需要调用 setNeedsDisplay ? 没有。 UIKit 会处理这个问题。我只提到了frame
,因为很多人在没有设置框架的情况下添加UILabel
s(实际上是bounds
)然后想知道为什么它没有出现。通常/通常正确的做法是[label sizeToFit]
。【参考方案2】:
如果文本更新后标签没有刷新,则可能是你的 CPU 已被充分利用,以下命令将强制刷新:
self.nameLabel.text = @"abcd";
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
【讨论】:
以上是关于Cocoa - iOS - 更新 UILabel 的文本属性是不是需要 setNeedsDisplay?的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性