ios frame和bounds区别

在开发中经常使用这两个属性,但是一直没有去真正理解,导致了好多情况把自己弄晕了,所以这次决定,花点时间去查一下,两者的区别

举个栗子1:

    在storyboard中拖入一个view, 然后用代码创建一个imageView, 让其加入到view中

   代码如下:

var image =UIImage(named:"a")   

var imageView =UIImageView(image: image)

imageView.frame=view.frame

view.addSubview(imageView)

效果如下

  打印view的frame 和 bounds 如下

(165.0,184.0,200.0,200.0)

(0.0,0.0,200.0,200.0)

经过网上查询,

于是改成下面这样

var image =UIImage(named:"a")

var imageView =UIImageView(image: image)

imageView.frame=view.bounds

view.addSubview(imageView)


得到了正常的效果



    下面我们来分析一下,frame是以父视图左上角位置为(0,0)点,  而bounds是以自身的左上角为(0.0)点算起

第一种情况之所以会跑偏, 是因为我们设置imageview.frame  = view.frame

刚才说了frame是以父视图(0,0)为起点, 之前打印的view frame为(165,184,200,200),

这就意味着imageview是起点是以父视图view的(0,0)为起点,偏移165,184), 所以就跑偏了,


第二种情况,我们把imageview.frame  = view.bounds, 而bounds是以自身的左上角为(0.0)点算起, 打印出view 的bounds为(0,0,200,200), 这样,imageview的起点就是以父视图(0,0)为起点,偏移(0,0), 这样就正好坐落在父视图的区域中了。

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

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,599评论 6 30
  • 原链接:http://www.jianshu.com/p/964313cfbdaa 原作者:西木柚子 仅供我个人收...
    油菜花花花花阅读 618评论 0 1
  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,572评论 1 14
  • 巨婴国 今天看了武志红的《巨婴国》,整理一下读书笔记。 “我为什么是现在这个样子,我怎样才可以不是这个样子。” 我...
    做好基本面提高概率阅读 411评论 0 1
  • 硬件是够,可是软件跟不上。缺少用心去感受,发现;缺少细心,细节。你可以没有感情,可是你不能没有心,你要用心去发现,...
    f9f1de48dc41阅读 190评论 0 0