IOS layoutSubviews总结

ios layout机制相关方法

  1. - (CGSize)sizeThatFits:(CGSize)size
  2. - (void)sizeToFit
  1. - (void)layoutSubviews
  2. - (void)layoutIfNeeded
  3. - (void)setNeedsLayout
  1. - (void)setNeedsDisplay
  2. - (void)drawRect

layoutSubviews在以下情况下会被调用:

1、init初始化不会触发layoutSubviews

但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发

2、addSubview会触发layoutSubviews

3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发父UIView上的layoutSubviews事件

6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

在苹果的官方文档中强调:

You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.

layoutSubviews, 当我们在某个类的内部调整子视图位置时,需要调用。

反过来的意思就是说:如果你想要在外部设置subviews的位置,就不要重写。

刷新子对象布局

-layoutSubviews方法:这个方法,默认没有做任何事情,需要子类进行重写
-setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用
-layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)

如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局

在视图第一次显示之前,标记总是“需要刷新”的,可以直接调用[view layoutIfNeeded].

时间: 2024-12-18 03:06:03

IOS layoutSubviews总结的相关文章

iOS layoutSubviews 什么时候会被调用

原文:When does layoutSubviews get called? It’s important to optimize any UIView layoutSubviews method you create, as it can be frequently called, and has the potential for creating recursion (triggering a setNeedsLayout from layoutSubviews can create a

iOS之layout方法-layoutSubviews、layoutIfNeeded、setNeedsLayout

下面列举下iOS layout的相关方法: layoutSubviews layoutIfNeeded setNeedsLayout setNeedsDisplay drawRect sizeThatFits sizeToFit 大概常用的上面几个 , 具体的应该还有别的. layoutSubviews 这个方法,默认没有做任何事情,需要子类进行重写 . 系统在很多时候会去调用这个方法: 1.初始化不会触发layoutSubviews,但是如果设置了不为CGRectZero的frame的时候就会

IOS中UIView的layoutSubviews和drawRect

UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了.而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据. 综上两个方法都是异步执行的,layoutSubviews方便数据计算,drawRect方便视图重绘. 先大概看下ios layout机制相关的

iOS UIView的layoutSubviews和drawRect

UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了.而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据. 综上两个方法都是异步执行的,layoutSubviews方便数据计算,drawRect方便视图重绘. 先大概看下ios layout机制相关的

iOS开发之layoutSubviews的作用和调用机制

在UIView里面有一个方法layoutSubviews,这个方法具体作用是什么呢? - (void)layoutSubviews; // override point. called by layoutIfNeeded automatically. As of iOS 6.0, when constraints-based layout is used the base implementation applies the constraints-based layout, otherwise

【iOS开发-67】QQ好友列表案例:UITableViewHeaderFooterView类、layoutSubviews与didMoveToSuperView方法等

(1)效果 (2)源代码于素材下载 http://pan.baidu.com/s/1jfdr4 (3)总结 --有标记状态的属性,应该在对应的模型类中,并且把getter方法重命名为isXXX: --UITableViewHeaderFooterView不可以用xib,只能用代码创建. --layoutSubviews方法,是当改变父控件高度的时候,自动调用这个方法,所以一般在这里面设置子控件的frame.因为子控件随着父控件而改变.这里要注意的时,初始化方法中父控件没有frame,所以子控件设

iOS 开发 - 在哪里更新 custom view 的subviews 的位置信息? (drawRect: 还是 layoutSubviews ?)

对于custom,可以通过addSubview: 增加内容,也可以通过Core Graphic绘制内容. 对于后者,在drawRect: 进行,位置信息随之确定 对于前者,一般在view初始化时进行(也可以动态地在其它地方进行),设置subview的位置信息时,需要了解下面的区别: - 在 layoutSubviews中,此时custom view 的bounds虽然已经确定,但是对于有constraint的subview(比如在nib文件中添加的约束),其位置信息还没有按照constraint

iOS开发——UI篇OC篇&layoutSubviews和drawRect

layoutSubviews和drawRect 首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews. 2.addSubview会触发layoutSubviews. 3.设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化. 4.滚动一个UIScrollView会触发layoutSubviews

iOS的layoutSubviews和drawRect方法何时调用

layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews.2.addSubview会触发layoutSubviews.3.设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化.4.滚动一个UIScrollView会触发layoutSubviews.5.旋转Screen会触发父UIView上的layoutSubviews事件.6.改变一个UIView大小的时候也会触发父UIView上的layoutS