美文网首页
使用 Auto Layout 后何时可以获取到正确的 frame

使用 Auto Layout 后何时可以获取到正确的 frame

作者: ygs | 来源:发表于2016-07-11 14:13 被阅读0次

    使用autoLayout后,我们在平常使用的方法

    viewDidLoad , viewWillAppear,方法中获取的Frame会不正确,这时候我们可以通过两种途径获取到正确的Frame。

    1:在想获取真实 frame 之前调用一下self.view.layoutIfNeeded(),这是一个能用但是并不好的方法:因为它进行了额外的毫不需要的 frame 计算。不推荐

    2:从试图控制器的生命周期来看这个问题:

    loadView--->viewDidLoad--->viewWillAppear--->viewWillLayoutSubviews--->viewDidLayoutSubviews
    --->viewDidAppear--->viewWillDisappear--->viewDidDisappear

    Auto Layout 的布局是从外到内的,即从屏幕尺寸开始布局,一直布局到最里面的元素。

    viewDidLayoutSubviews 时当前视图已经把子元素布局完毕,frame 已经形成

    viewDidAppear 时,渲染系统把当前视图加入父视图中,显示在屏幕上

    所以,解决方案已经有了:

    避免调用 layoutSubviews,在 viewDidLayoutSubviews 和 viewDidAppear 中进行 frame 的获取

    如果你需要尽早地做一些大动作,推荐在 viewDidLayoutSubviews,此时用户还没有看到 UI,用法可以更灵活

    注意 viewDidLayoutSubviews 可能会被多次调用,所以添加元素之类的操作尽量避免在这里做

    viewDidAppear 中可以干一切你想干的事情,但是一些需要用户看到的东西例如动画只能在这里做。

    相关文章

      网友评论

          本文标题:使用 Auto Layout 后何时可以获取到正确的 frame

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