ios frame和bounds区别

作者: tsinghan | 来源:发表于2015-04-09 10:04 被阅读2708次

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

举个栗子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), 这样就正好坐落在父视图的区域中了。

相关文章

网友评论

  • 大号鱼骨头:frame表示的view坐标位置及大小是基于父坐标系的。
    bound表示的view坐标位置及大小是基于这个view自己的坐标系的。
    牢记这两句话。之后推导看属于哪种情况?
  • emmet7life:写的不错。
    但是这个view刚开始会误认为是UIViewController的根view,但其实你这里的view是绿色视图。希望下次说明一下。
  • 剑舞春秋:

    View有两个属性:frame和bound.

    frame表示的view坐标位置及大小是基于父坐标系的。

    bound表示的view坐标位置及大小是基于这个view自己的坐标系的。

    如果使用frame属性,那必须小心,这些值是表示子视图在父视图中的位置,包括旋转和缩放。

    这意味着使用self.view.bounds.size可以相对可靠的获得一个视图控制器的视图尺寸。

    http://liaogang.github.io/tech/2014/11/28/%E4%BD%A0%E5%8F%AF%E8%83%BD%E4%B8%8D%E7%9F%A5%E9%81%93frames%E5%92%8Cbounds/

本文标题:ios frame和bounds区别

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