美文网首页
iOS开发——Autolayout的Top Layout gui

iOS开发——Autolayout的Top Layout gui

作者: VincentHK | 来源:发表于2017-09-06 19:13 被阅读0次

    转载 https://blog.kyleduo.com/2014/10/22/ios_learning_autolayout_toplayoutguide/

    问题描述
    在学习UIPageViewController的过程中,按照《【译】如何使用Storyboard创建UIPageViewController》编写引导页Demo,但是做完的效果和Demo效果有一些出入,效果分别为:正确效果错误效果
    简单说就是当滑动到下一页的时候,下一页会有一个缩小效果,但是这个效果并不是手动添加的。

    分析问题
    之前的那篇《iOS学习笔记——UIScrollView的坑和填坑》中提到了Autolayout的问题:自动添加Constraints导致出错。这次要说的问题和上次都和一个东西有关——Top Layout Guide。
    Top Layout Guide用于自动布局的辅助,在Storyboard中可以看到Top Layout Guide作为ViewController的属性存在,也就是topLayoutGuide,官方文档对这个属性的Discussion是:
    topLayoutGuide属性表示不希望被透明的状态栏或导航栏遮挡的内容范围的最高位置。这个属性的值是它的length属性的值(topLayoutGuide.length),这个值可能由当前的ViewController或这个ViewController所属的NavigationController或TabBarController决定,有如下情况:
    一个独立的ViewController,不包含于任何其他的ViewController。如果状态栏可见,topLayoutGuide表示状态栏的底部,否则表示这个ViewController的上边缘。
    包含于其他ViewController的ViewController不对这个属性起决定作用,而是由容器ViewController决定这个属性的含义:
    如果导航栏(Navigation Bar)可见,topLayoutGuide表示导航栏的底部。
    如果状态栏可见,topLayoutGuide表示状态栏的底部。
    如果都不可见,表示ViewController的上边缘。这部分还比较好理解,总之是屏幕上方任何遮挡内容的栏的最底部。

    通过对ViewController的生命周期消息进行跟踪,在下一页显示出来前,首先调用下一页ViewController的viewDidLoad方法,也就是加载过程,此时topLayoutGuide值为0;而显示的消息viewWillAppear:和布局的消息viewWillLayoutSubview在放开手指之后才会发送,而这个时候已经完全显示了,topLayoutGuide的值为20,也就是在状态栏下边缘。
    当松手的时候,topLayoutGuide的值发生的这一个变化,就导致我们看到了一个突然缩小的效果。

    相关文章

      网友评论

          本文标题:iOS开发——Autolayout的Top Layout gui

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