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)

效果如下

ios frame和bounds区别_第1张图片

  打印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)


得到了正常的效果


ios frame和bounds区别_第2张图片


    下面我们来分析一下,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 frame和bounds区别)