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