iOS

iOS布局和绘制

2019-03-19  本文已影响12人  HoooChan

layoutSubviews

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

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

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

1、自动刷新触发器:

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

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

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

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

[译] 揭秘 iOS 布局

上一篇 下一篇

猜你喜欢

热点阅读