写的demo会调用两次layoutSubview,为什么呢?
#import "CustomView.h"@implementation CustomView- (void)layoutSubviews {
[super layoutSubviews];
NSLog(@"frame:%@",NSStringFromCGRect(self.frame));
}@end
#import "CustomView.h"@implementation CustomView- (void)layoutSubviews {
[super layoutSubviews];
NSLog(@"frame:%@",NSStringFromCGRect(self.frame));
}@end
setFrame应该是autolayout调用的吧?
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
看代码 两次的log一样,按理说没更新
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
看代码 两次的log一样,按理说没更新
那就看它的父视图是什么被添加到视图层级上的,layoutSubviews方法被调用的时候,自己的子视图的该方法也会被调用
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
看代码 两次的log一样,按理说没更新
那就看它的父视图是什么被添加到视图层级上的,layoutSubviews方法被调用的时候,自己的子视图的该方法也会被调用
先谢啦。layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
对吗?在demo中,xib的基View上面就是CustomView,再没有其他view
情况3被调用了一次,还有一次呢?
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
看代码 两次的log一样,按理说没更新
那就看它的父视图是什么被添加到视图层级上的,layoutSubviews方法被调用的时候,自己的子视图的该方法也会被调用
先谢啦。layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
对吗?在demo中,xib的基View上面就是CustomView,再没有其他view
情况3被调用了一次,还有一次呢?
你上面说的对,我也在11年的时候转载过,原文:http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/。
但是似乎从xib(或storyboard)中启动的话略有不同,我也没有找到具体的xib加载过程
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
看代码 两次的log一样,按理说没更新
那就看它的父视图是什么被添加到视图层级上的,layoutSubviews方法被调用的时候,自己的子视图的该方法也会被调用
先谢啦。layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
对吗?在demo中,xib的基View上面就是CustomView,再没有其他view
情况3被调用了一次,还有一次呢?
你上面说的对,我也在11年的时候转载过,原文:http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/。
但是似乎从xib(或storyboard)中启动的话略有不同,我也没有找到具体的xib加载过程
我有看你以前写的DKCarouselView
里面是这样避免layoutsubview多次执行的:)if (CGRectEqualToRect(self.lstRect, self.frame)) return;
setFrame应该是autolayout调用的吧?
第一次是自己被添加到视图层级上的时候;
第二次应该是自己的frame被更新了
看代码 两次的log一样,按理说没更新
那就看它的父视图是什么被添加到视图层级上的,layoutSubviews方法被调用的时候,自己的子视图的该方法也会被调用
先谢啦。layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
对吗?在demo中,xib的基View上面就是CustomView,再没有其他view
情况3被调用了一次,还有一次呢?
你上面说的对,我也在11年的时候转载过,原文:http://blog.logichigh.com/2011/03/16/when-does-layoutsubviews-get-called/。
但是似乎从xib(或storyboard)中启动的话略有不同,我也没有找到具体的xib加载过程
我有看你以前写的DKCarouselView
里面是这样避免layoutsubview多次执行的:)if (CGRectEqualToRect(self.lstRect, self.frame)) return;
是的,因为UIScrollView在滚动中是实时调用layoutSubviews方法的,但是我又需要在scrollView的frame发生变化的时候即时更新子视图,所以就采用了这种做法