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 将完成更新所需的一切工作。其他属性也一样(fonttextColor 等)。您唯一需要手动执行的操作(如果您不使用 IB)就是设置frame

【讨论】:

非常感谢您的及时回答,我对您所说的有一个疑问。只是为了澄清如果您在代码中设置框架,那么您需要调用 setNeedsDisplay ? 没有。 UIKit 会处理这个问题。我只提到了frame,因为很多人在没有设置框架的情况下添加UILabels(实际上是bounds)然后想知道为什么它没有出现。通常/通常正确的做法是[label sizeToFit]【参考方案2】:

如果文本更新后标签没有刷新,则可能是你的 CPU 已被充分利用,以下命令将强制刷新:

self.nameLabel.text = @"abcd";
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];

【讨论】:

以上是关于Cocoa - iOS - 更新 UILabel 的文本属性是不是需要 setNeedsDisplay?的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性

在ios中设置文本(大多数时候)后,UILabel不更新其高度

UILabel 圆角在 iOS 7.1 中变得清晰

UILabel 自动改变颜色

cocoa pods

关于iOS11中UILabel的问题