美文网首页架构师之路iOS 应用层
关于contentInset和contentOffset和fra

关于contentInset和contentOffset和fra

作者: 齐滇大圣 | 来源:发表于2015-07-25 20:39 被阅读2109次

    frame和bound主要就是坐标系的问题。
    frame相对的是父坐标的坐标系:该view在父view的位置和大小
    bounds相对的是本身的坐标系:该view在本地坐标系中的位置和大小
    详情可参考 ios view的frame和bounds之区别(位置和大小)

    说contentInset和和contentOffset的时候就要先说说contentSize

    以UIScrollerView举例。contentSize表示的是内容区域的大小。做过广告栏滚动的应该都用过这个属性。可以理解为UIScrollerView有一个子view是ContentView.


    然后contentInset和contentOffset应该就是关于内容视图的一些坐标问题了。

    contentOffset 是scrollview当前显示区域顶点相对于frame顶点的偏移量。可以理解为contentview的顶点相对于scrollerVIew的frame的偏移量。内容视图向上滚动contentOffset.y>0。

    比如我写了一个UIScrollerView上面放了两张图片,初始的时候contentOffset.y==0。

    contentOffset.y==0

    然后向上滚动contentOffset.y>0。

    contentOffset.y>0

    contentInset表示contentView.fram.orgin与scrollerView.fram.orgin的关系。可以类比于css里的padding。
    比如scroller.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
    则内容视图开始的位置为(0,50)

    scroller.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

    底部离父view的距离还是不变,下图是拉到最底部的时候

    scroller.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

    scroller.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);
    那么contentView底部离scrollerView底部的距离为50;

    下图是拉到最底部的时候


    scroller.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);

    最后做了一个小的demo,利用contentOffset计算来实现UITableView的sectionView跟随滚动并在顶部悬停的效果。
    demo github地址

    contentOffset.gif

    相关文章

      网友评论

        本文标题:关于contentInset和contentOffset和fra

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