在iOS系统中,以下情况会调用UIView的layoutSubviews方法:
1.直接调用[self setNeedsLayout]。
2.addSubview的时候。
3.当view的size发生改变的时候。
4.滑动UIScrollView的时候。
5.旋转Screen会触发父UIView上的layoutSubviews事件。
但是layoutSubviews方法在iPhone中能被正常调用,在iPad中不会被调用。
解决此问题的方法:
1.使用通知监听状态栏的变化,然后再调用更新layout布局的方法(updateFrame)。
- (void)registerOrientationObserver {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateFrame) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];
}
2.在控制器或者父级类中(如果父类的layoutSubviews不被调用,则顺着继承链往上走)调用setNeedLayout方法,则CustomView中的layoutSubviews就会触发。
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
[self.customView setNeedsLayout];
}