layoutSubviews的理解

有时候我们在开发或者是看其他人编写的组件的时候 经常会看到子类重写了layoutSubviews的方法子类调用了有时候又会调用setNeedsLayoutlayoutIfNeeded那么有时候偶尔会想为什么需要调用setNeedsLayoutlayoutIfNeeded 这两个方法和layoutSubviews之间又有什么联系呢?


layoutSubview的作用是什么呢?

  • layoutSubview的字面意思就是布局子控件。
  • 需要首先需要明确的一点是系统的View并不会在layoutSubview方面里面实现某些代码,如果想要在layoutSubview搞事情,必须要子类去重写该方法
  • 当需要更新subview的frame的时候

layoutSubview何时触发呢?

  • 子视图首次被添加到父视图,子视图会触发layoutSubviews
  • 视图改变自身的size的时候,会触发layoutSubviews
  • 当视图添加subview的时候
  • 第一次滑动UIScrollView的时候触发layoutSubviews
  • 旋转Screen会触发父UIView上的layoutSubviews事件。
  • 手动调用setNeedsLayout
  • init的时候不会触发layoutSubviews

其他

  • 注意


    image.png
  • 有时候需要动画效果来刷新界面 分为通过frame或者是autolayout,如果是frame方式创建view并且 那么我们直接调用既可
 [UIView animateWithDuration:5 animations:^{
        self.testView.frame=CGRectMake(0, 0, 10, 111);
       
    } completion:^(BOOL finished) {
        
    }];
  • 如果是通过autolayout布局,需要把约束写在animateWithDuration的前面,那样子才会执行动画效果。具体为什么,还不是很清楚
 self.animationViewWIdth.constant=200;
    self.animationViewWIdth.constant=100;
[UIView animateWithDuration:5 animations:^{
        [self.animationView setNeedsLayout];
        [self.animationView layoutIfNeeded];
       
    } completion:^(BOOL finished) {
        
    }];

你可能感兴趣的:(layoutSubviews的理解)