LayoutSubviews的调用

LayoutSubviews

此方法是对Subviews重新布局,默认是,不做事情的,需要的时候要进行重写

调用场景

  • addSubview时

在viewDidLoad中,添加子视图myView,并设置约束,此时只调用一次,layoutSubviews方法。

	BigView *myView = [[BigView alloc] init];
    [self.view addSubview:myView];
    myView.backgroundColor = [UIColor whiteColor];
    [myView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.center.equalTo(self.view);
        make.width.equalTo(self.view);
        make.height.equalTo(@100);

    }];

打印结果:
在这里插入图片描述

  • 注意:
    如果用将子视图myview的位置设在状态栏的上面,也就是顶部距离屏幕的大小小于状态栏的高度,(xr的状态栏高度为20)
    会发现此时会调用两次layoutSubviews方法。
myView.frame = CGRectMake(10, 10, 50, 400);

打印结果:

2019-09-30 20:42:52.077612+0800 LayoutSubviews[1581:40441] BigView-----[BigView layoutSubviews]
2019-09-30 20:42:52.077726+0800 LayoutSubviews[1581:40441] BigView-----[BigView layoutSubviews]

这是由于状态栏的原因,只要距离屏幕的高度大于20,就是正常调用的。

  • view的frame改变的时候

    • 这里是,添加了一个点击事件,改变了myView的frame,
      在这里插入图片描述
      再次调用了layoutSubviews方法。
    • 改变myView的子视图的大小也会触发layoutSubview方法。
  • 旋转屏幕时调用

  • 这里有一个小问题应该注意一下
    在这里插入图片描述
    这是未旋转前,上面有状态栏,也就是时间和wifi还有电量显示的地方。
    向右旋转一下,会发现,导航栏消失了。
    在这里插入图片描述
    导航栏由有到无,会触发一次layoutSubView方法
    打印结果

2019-09-30 19:38:13.717372+0800 LayoutSubviews[1026:19675] BigScrollView-----[BigScrollView layoutSubviews]
2019-09-30 19:38:13.717526+0800 LayoutSubviews[1026:19675] BigScrollView-----[BigScrollView layoutSubviews]
2019-09-30 19:38:20.759676+0800 LayoutSubviews[1026:19675] BigScrollView-----[BigScrollView layoutSubviews]

前两次是初始化的时候调用的,最后一次是旋转屏幕的时候调用的。这里初始化的时候调用两次的原因,尚未搞明白。
再次旋转,到下图的位置。
在这里插入图片描述
此时,并没有调用layoutSubViews方法,状态栏,依旧没有出现,继续旋转屏幕,
在这里插入图片描述
此时,依旧没有调用layoutSubViews方法,此时,状态栏也没有显示。继续旋转,
在这里插入图片描述
回到原来的状态,状态栏出现,此时调用了ayoutSubViews方法。
打印结果
在这里插入图片描述

  • 总结:
    从有状态栏,旋转到没有状态栏的时候,会调用一次,从没有到有也会调用一次。

  • 滑动ScrollerView的时候触发

打印结果

2019-09-30 20:48:21.832325+0800 LayoutSubviews[1624:42555] BigScrollView-----[BigScrollView layoutSubviews]
2019-09-30 20:48:21.848972+0800 LayoutSubviews[1624:42555] BigScrollView-----[BigScrollView layoutSubviews]
2019-09-30 20:48:21.864911+0800 LayoutSubviews[1624:42555] BigScrollView-----[BigScrollView layoutSubviews]
2019-09-30 20:48:21.881068+0800 LayoutSubviews[1624:42555] BigScrollView-----[BigScrollView layoutSubviews]
2019-09-30 20:48:21.906296+0800 LayoutSubviews[1624:42555] BigScrollView-----[BigScrollView layoutSubviews]

每当滑动的时候,就会触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值