setNeedsLayout 和 setNeedsDisplay

Posted

技术标签:

【中文标题】setNeedsLayout 和 setNeedsDisplay【英文标题】:setNeedsLayout and setNeedsDisplay 【发布时间】:2013-01-24 17:15:32 【问题描述】:

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

像往常一样,文档对此很模糊。

【问题讨论】:

【参考方案1】:

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

setNeedsLayout 将布局子视图

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

setNeedsDisplay 将要求重绘您的视图(drawRect: 等)。

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

【讨论】:

不,我想知道更多的是两者都用于重绘视图,对吧?两者都会等到下一个绘制周期重新绘制,对吧? 布局与绘图无关。布局是关于定位/调整子视图。但是,是的,两者都延迟到下一个 runloop 周期。因此,连续多次调用一个只会导致一次重新布局/重绘。 请举例说明何时需要setNeedsDisplay @Pwner 假设你想在两个点之间画一条线(确切地说是两个 UIView),这是在 DrawLineViewdrawRect: 中实现的。更改一个或两个按钮的位置后,您需要调用[drawLineView setNeedsDisplay]; 重新绘制两个点的新位置之间的线。 @Pwner blog.fujianjin6471.com/2015/06/11/…

以上是关于setNeedsLayout 和 setNeedsDisplay的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发:setNeedsLayOut和setNeedsDisplay区别

iOS UIView常用的一些方法setNeedsDisplay和setNeedsLayout 区别

调用 setNeedsLayout 或 setNeedsDisplay 的场合

UIView 子视图中的 setNeedsLayout

UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释

UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释