setNeedsLayout和setNeedsDisplay


70

之间有什么真正的区别UIView方法setNeedsLayoutsetNeedsDisplay

像往常一样,文档对此一无所知。

Answers:


97

实际上,文档对此非常清楚:

  • setNeedsLayout将布局子视图

    若要调整视图的子视图的布局,请在应用程序的主线程上调用此方法。

  • setNeedsDisplay将要求您重新绘制视图(drawRect:,等等)。

    您可以使用此方法或setNeedsDisplayInRect:通知系统您需要重绘视图的内容。


3
不,我想知道两者是否都用于重绘视图,对吗?两者都将等到下一个绘制周期重新绘制,对吗?
鸭子

24
布局与绘图无关。布局是关于定位/调整子视图的大小。但是是的,两者都延迟到下一个运行循环周期。因此,连续调用多次只会导致一次重新布局/重画。
Joris Kluivers

4
请提供何时setNeedsDisplay需要的示例。
Pwner 2013年

9
@Pwner假设您要在两个点(确切地说是两个UIView)之间绘制一条线,这是在DrawLineView中实现drawRect:的。更改一个按钮或两个按钮的位置后,需要调用以在两个点的新位置之间重画线。[drawLineView setNeedsDisplay];
fujianjin6471 2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.