setNeedsLayout 和 setNeedsDisplay
Posted
技术标签:
【中文标题】setNeedsLayout 和 setNeedsDisplay【英文标题】:setNeedsLayout and setNeedsDisplay 【发布时间】:2013-01-24 17:15:32 【问题描述】:UIView
方法 setNeedsLayout
和 setNeedsDisplay
之间的真正区别是什么?
像往常一样,文档对此很模糊。
【问题讨论】:
【参考方案1】:实际上文档对此非常清楚:
setNeedsLayout 将布局子视图
当您想要调整视图子视图的布局时,请在应用程序的主线程上调用此方法。
setNeedsDisplay 将要求重绘您的视图(drawRect:
等)。
您可以使用此方法或 setNeedsDisplayInRect: 通知系统您的视图内容需要重绘。
【讨论】:
不,我想知道更多的是两者都用于重绘视图,对吧?两者都会等到下一个绘制周期重新绘制,对吧? 布局与绘图无关。布局是关于定位/调整子视图。但是,是的,两者都延迟到下一个 runloop 周期。因此,连续多次调用一个只会导致一次重新布局/重绘。 请举例说明何时需要setNeedsDisplay
。
@Pwner 假设你想在两个点之间画一条线(确切地说是两个 UIView),这是在 DrawLineView 的drawRect:
中实现的。更改一个或两个按钮的位置后,您需要调用[drawLineView setNeedsDisplay];
重新绘制两个点的新位置之间的线。
@Pwner blog.fujianjin6471.com/2015/06/11/…以上是关于setNeedsLayout 和 setNeedsDisplay的主要内容,如果未能解决你的问题,请参考以下文章
iOS开发:setNeedsLayOut和setNeedsDisplay区别
iOS UIView常用的一些方法setNeedsDisplay和setNeedsLayout 区别
调用 setNeedsLayout 或 setNeedsDisplay 的场合
UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释