ios layoutsubView 何时被调用

-layoutSubviews方法:这个方法,在UIView中默认没有做任何事情,需要子类进行重写。UIView是一个纯净的视图,里面没有任何子控件,所以不会做什么事情。一般系统自带控件中有子控件的都会重写layoutSubviews方法,因此我们自定义系统自带控件并且重写layoutSubviews必须调用[super layoutSubviews],先布局系统自带子控件的位置和尺寸,才设置我们自己的控件位置和尺寸。

       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事件

layoutSubviews方法调用先于drawRect,也就是先布局子视图,在重绘。

- (id)initWithFrame:(CGRect)frame {    

self = [super initWithFrame:frame];  

   if (self) {  

       // Initialization code      

           [self setNeedsLayout];      

   NSLog(@"%s",__func__);     

  }   

  return self; 

} 

- (void)layoutSubviews 

{

     [super layoutSubviews]; 

    NSLog(@"%s",__func__); 

} 

 

- (void)drawRect:(CGRect)rect

{ 

    NSLog(@"%s",__func__);

}
原文地址:https://www.cnblogs.com/llios/p/3921686.html