bounds和frame的区别

frame:以父控件左上角为原点
bounds:以自己的左上角为原点,bounds x,y永远为0(这是错误的认识)

frame和bounds都是用来描述一块区域
frame:描述可视范围,也就是说从左上角的0,0点开始延伸,它延伸的区域就是我们的可视范围

bounds:描述可视范围在内容的区域,所有的子控件都有内容,它就类似于空气,是看不到的,正常情
                况下,内容是无限大的,所有的子控件其实都是放在内容上的,在可视范围内的内容我们才能
                看见,所以正常情况下,内容的左上角(bounds)与可视范围(frame)的左上角是重合的,当修
                改bounds的x与y都会导致子控件跟着移动.需要注意的是,可视范围(frame)是永远不会变的,它是相对父控件的.

所有的子控件都是相对于内容
bounds:修改内容原点

相对性:可视范围相对于父控件位置永远不变
          可视范围相对于内容,位置改变

如下图举例:


bounds.png

默认情况下,可视范围(frame)的原点与内容(bounds)的原点是重合的.所以加在内容左上角的开关能看到,因为也在可视范围内,当此时修改内容的原点,也就是bounds的y值,如y += 10,由于可视范围是不变的,这时内容的原点就会变化,y += 10,那么内容原点就会往上移10,此时内容上的控件(本例中指开关)也会跟着
内容原点一起上移.

总结:contentOffset(偏移量)的值和bounds的origin值是一样的,偏移量往可视范围外偏移是正数,往可视范围里面偏移是负数,可视范围指的是控件的frame

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闲来无事, 想到之前面试时有问到bounds和frame的区别的问题,索性就写了一个简单的控件,验证一下,大家请看...
    LOVE婷阅读 743评论 0 0
  • bounds 在本地坐标系的矩形区域,默认情况下就是以自身的左上角为(0,0)点。 注意点:bounds的(x.y...
    AYangGo阅读 455评论 0 0
  • frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统) bounds:该view...
    Ayaoguai阅读 234评论 0 0
  • 原链接:http://www.jianshu.com/p/964313cfbdaa 原作者:西木柚子 仅供我个人收...
    油菜花花花花阅读 609评论 0 1
  • 在iOS中我们会经常遇到frame和bounds,这两个概念很相似,但是也有区别。frame还好理解,但是boun...
    西木柚子阅读 31,733评论 29 90