Cocoa touch Cocoa-iOS-更新UILabel的文本属性是否需要setNeedsDisplay?

Cocoa touch Cocoa-iOS-更新UILabel的文本属性是否需要setNeedsDisplay?,cocoa-touch,uilabel,setneedsdisplay,setneedsdisplayinrect,Cocoa Touch,Uilabel,Setneedsdisplay,Setneedsdisplayinrect,我是一个新手,我有一个iOS项目,我正在设置UILabel字段的文本属性 self.nameLabel.text = @"abcd"; 问题 我是否需要调用setNeedsDisplayInRect以显示新文本值的标签 我的理解基于一些测试: 未调用setNeedsDisplayInRect,标签文本已更新 但我想知道标签将显示新值而不显式调用setNeedsDisplay是巧合还是意外 谢谢AUILabel将在您设置其text属性时执行更新所需的所有操作。对于它的其他属性(font,

我是一个新手,我有一个iOS项目,我正在设置UILabel字段的文本属性

self.nameLabel.text = @"abcd";
问题

  • 我是否需要调用setNeedsDisplayInRect以显示新文本值的标签
我的理解基于一些测试:

  • 未调用setNeedsDisplayInRect,标签文本已更新
  • 但我想知道标签将显示新值而不显式调用setNeedsDisplay是巧合还是意外

谢谢

A
UILabel
将在您设置其
text
属性时执行更新所需的所有操作。对于它的其他属性(
font
textColor
,等等)也是一样的。当你设置它的
text
属性时,你唯一需要手动做的事情(如果你不使用IB)就是设置
框架。对于其其他属性(
font
textColor
,等等),您只需手动(如果您不使用IB)设置
,如果标签在文本更新后仍不刷新,您的CPU可能会被充分利用,并且以下命令将强制刷新:

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

如果标签在文本更新后仍不刷新,则CPU可能已被充分利用,以下命令将强制刷新:

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

非常感谢你的及时回答,我对你所说的有一点怀疑。只是为了澄清,如果在代码中设置了帧,则需要调用setNeedsDisplay?否。UIKit会处理这个问题。我只提到了
frame
,因为很多人添加
UILabel
s而没有设置框架(
bounds
实际上),然后想知道为什么它没有出现。通常正确的做法是
[label sizeToFit]
。非常感谢您的及时回答,我对您所说的有一个疑问。只是为了澄清,如果在代码中设置了帧,则需要调用setNeedsDisplay?否。UIKit会处理这个问题。我只提到了
frame
,因为很多人添加
UILabel
s而没有设置框架(
bounds
实际上),然后想知道为什么它没有出现。通常正确的做法是
[label sizeToFit]