美文网首页
layoutSubviews的理解

layoutSubviews的理解

作者: 会上树的潴 | 来源:发表于2021-07-06 14:56 被阅读0次

    有时候我们在开发或者是看其他人编写的组件的时候 经常会看到子类重写了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的理解

          本文链接:https://www.haomeiwen.com/subject/amjgultx.html