首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UIView子视图中的setNeedsLayout

在iOS开发中,UIView的setNeedsLayout方法用于通知系统该视图需要重新布局。当你修改了一个视图的属性,例如更改了其大小、位置或者约束,你需要调用这个方法来通知系统,让系统重新计算并更新视图的布局。

setNeedsLayout方法会将视图标记为需要重新布局,但实际的布局计算并不会立即发生。相反,系统会在适当的时机(例如下一次的视图更新周期)进行布局计算。这种机制有助于提高应用程序的性能,因为它可以避免不必要的布局计算。

在使用setNeedsLayout方法时,请注意以下几点:

  1. 如果你在视图层次结构中的多个视图上调用setNeedsLayout,系统会将它们合并为一次布局计算,以提高性能。
  2. 如果你需要立即更新视图的布局,可以调用layoutIfNeeded方法。但请注意,这种做法通常不推荐,因为它可能会导致性能下降。
  3. 如果你需要更新视图的布局,最好在修改视图属性后立即调用setNeedsLayout,这样可以确保在下一次布局计算周期开始时,视图已经准备好进行布局。

总之,setNeedsLayout方法是一种有效的方式,可以在iOS开发中通知系统重新计算视图的布局。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

setNeedsLayout和layoutIfNeeded看我就懂!

强制刷新布局,调用 setNeedsLayout,如果想马上刷新界面,调用layoutIfNeeded 二、setNeedsLayout跟layoutIfNeded setNeedsLayout调整视图视图布局时...但在我们例子中,添加了2秒动画块UIView.animate,在该块内,我们通过layoutIfNeeded方法强制立即布局。...当我们把动画块代码替换成 UIView.animate(withDuration: 2.0) { self.view.setNeedsLayout() } 现在我们在动画块中正在做是将视图标记为需要布局更新...但是,我们没有在动画块上下文中进行视图更新,也就是说刚好是一个周期,所以它似乎是立即,跟没有UIView.animate这段代码效果是一样。...** 刷新对象布局: -layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写 -setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded

2.6K90

layoutSubviews总结

4、滚动一个UIScrollView会触发layoutSubviews 5、旋转Screen会触发父UIViewlayoutSubviews事件 6、改变一个UIView大小时候也会触发父...UIViewlayoutSubviews事件 在苹果官方文档中强调: You should override this method only if the autoresizing...layoutSubviews, 当我们在某个类内部调整视图位置时,须要调用。 反过来意思就是说:假设你想要在外部设置subviews位置,就不要重写。...刷新对象布局 -layoutSubviews方法:这种方法,默认没有做不论什么事情,须要子类进行重写 -setNeedsLayout方法: 标记为须要又一次布局,异步调用layoutIfNeeded...———————————- layoutSubviews对subviews又一次布局 layoutSubviews方法调用先于drawRect setNeedsLayout在receiver标上一个须要被又一次布局标记

20720

layoutSubviews 详解

4、滚动一个UIScrollView会触发layoutSubviews 5、旋转Screen会触发父UIViewlayoutSubviews事件 6、改变一个UIView大小时候也会触发父...UIViewlayoutSubviews事件 在苹果官方文档中强调: You should override this method only if the autoresizing...layoutSubviews, 当我们在某个类内部调整视图位置时,需要调用。 反过来意思就是说:如果你想要在外部设置subviews位置,就不要重写。...刷新对象布局 –layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写 -setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局...——————————- layoutSubviews对subviews重新布局 layoutSubviews方法调用先于drawRect setNeedsLayout在receiver标上一个需要被重新布局标记

43930

iOS layout相关方法

layoutSubviews 5.旋转Screen会触发父UIViewlayoutSubviews事件 6.改变UIView大小时候也会触发父UIViewlayoutSubviews事件 在苹果官方文档中强调...the autoresizing behaviors of the subviews do not offer the behavior you want.layoutSubviews 当我们在某个类内部调整视图位置时...setNeedsLayout 标记为需要重新布局,不立即刷新,但layoutSubviews一定会被调用配合layoutIfNeeded立即更新 layoutIfNeeded 如果有需要刷新标记,立即调用...假设有个UILabel 添加它距离左边距离约束为leftconstraint 值为 10 现在我们想让它距左边距离以动画形式改变为100 如果这么做 UIView.animateWithDuration...以上1,2推荐;而3,4不提倡 drawRect方法使用注意点: 1、若使用UIView绘图,只能在drawRect:方法中获取相应contextRef并绘图。

1K10

谈谈 Autolayout

AutoLayout 关于 update 几个方法 UIView 是我们经常使用一个基本控件,其中有几个基本布局方法需要清楚。...layoutSubViews: 当 View 及其所有视图 frame 发生改变时候,会调用 layoutSubviews,所以在需要更新 frame 来重新定位或更改大小时重载它。...setNeedsLayout 触发 layoutSubviews 调用最省资源方法就是在你视图上调用 setNeedsLaylout 方法,表示视图布局需要重新计算。...layoutIfNeeded 调用 layoutIfNeeded 会触发 layoutSubviews,告知页面布局立刻更新,所以一般都会和 setNeedsLayout 一起使用。...layoutSubview 中,比如设置好约束后马上就想根据约束结果计算高度,那么必须在设置完约束之后手动调用 setNeedsLayout 和 layoutIfNeeded 方法,让视图立即 layout

66720

关于Autolayout和Masonry自动布局几个坑

采用控制器原因是因为防止所有的逻辑代码都混在根控制器中,所以没有使用nicklockwood iCarousel 或SwipeView ,而是采用了之前一直在用SCPageViewController...setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。...所以一般都会和setNeedsLayout一起使用。如果希望立刻生成新frame需要调用此方法,利用这点一般布局动画可以在更新布局后直接使用这个方法让动画生效。...主要注意点为: UIScrollView自身约束按照正常视图添加。 内部控件约束不能按照UIScrollView来设置,同时必须完整,否则撑不起contentSize。...*lastView;CGFloat height = 25;//添加视图,并且设置试图约束,注意top约束由上一个视图决定for (int i = 0; i < 10; i++) { UIView

1.5K20

关于Autolayout和Masonry自动布局几个坑

采用控制器原因是因为防止所有的逻辑代码都混在根控制器中,所以没有使用nicklockwoodiCarousel或SwipeView,而是采用了之前一直在用SCPageViewController...参考: Debugging iOS AutoLayout Issues Autolayout Breakpoints 关于Masonry使用 必须明确AutoLayout关于更新几个方法区别 setNeedsLayout...所以一般都会和setNeedsLayout一起使用。如果希望立刻生成新frame需要调用此方法,利用这点一般布局动画可以在更新布局后直接使用这个方法让动画生效。...主要注意点为: UIScrollView自身约束按照正常视图添加。 内部控件约束不能按照UIScrollView来设置,同时必须完整,否则撑不起contentSize。...*lastView;CGFloatheight=25;//添加视图,并且设置试图约束,注意top约束由上一个视图决定for(inti=0;i<10;i++){UIView*view=[[UIViewalloc

1.4K20

View编程指南(三)

图显示了一个转换过程中如何导致矩形大小改变例子。 在图中,外部父view包含旋转subview。 将subview坐标系中矩形转换为父坐标系,得到一个物理上较大矩形。...与view图层相关联核心动画sublayers发生更改并需要布局。 您应用程序通过调用viewsetNeedsLayout或layoutIfNeeded方法来强制执行布局。...您应用程序通过调用view 底层layersetNeedsLayout方法来强制布局。 当您更改view大小时,通常需要更改嵌入view位置和大小,以考虑其父级新大小。...如果此属性设置为YES,则该view使用每个子viewautoresizingMask属性来确定如何调整和定位该view。对任何view大小更改会触发嵌入式子view类似布局调整。...上图中灵活宽度和高度常数与“AutoSizing”控件图中宽度和大小指示器具有相同行为。 但是,保证行为和使用是有效逆转。

1.7K30
领券