美文网首页iOS
iOS布局和绘制

iOS布局和绘制

作者: HoooChan | 来源:发表于2019-03-19 19:45 被阅读12次

layoutSubviews

这个方法用来计算子视图的位置和大小,它会调用子视图的layoutSubviews方法,所以开销很大。

当此方法执行完成后会触发该View所属的ViewController的viewDidLayoutSubviews,所以应该把所有依赖于布局或者大小的代码放在 viewDidLayoutSubviews 中,而不是放在 viewDidLoad 或者 viewDidAppear 中。

layoutSubviews的开销很大,所有我们不能直接显式地调用它。触发layoutSubviews执行有以下几种方法:

1、自动刷新触发器:

  • a、修改View的大小;
  • b、增加subView;
  • c、UIScrollView滚动;
  • d、设备旋转;
  • e、更新约束;

2、setNeedsLayout 方法会立刻执行并返回,但在返回前不会真正更新视图。视图会在下一个 update cycle 中更新。

3、layoutIfNeeded 会立即调用 layoutSubviews 方法。但是如果你调用了 layoutIfNeeded 之后,并且没有任何操作向系统表明需要刷新视图,那也不会调用 layoutsubview。

setNeedsLaylout是最省资源的方法,但是当我们通过修改约束来进行动画时,就需要用layoutIfNeeded 来动画到新的状态,以确保在动画开始之前传播所有的布局更新:

    [self layoutIfNeeded];
    [UIView animateWithDuration:0.25 animations:^{
        // 更新约束
        [self layoutIfNeeded];
    }];

[译] 揭秘 iOS 布局

相关文章

网友评论

    本文标题:iOS布局和绘制

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