美文网首页
『iOS布局』frame与bounds

『iOS布局』frame与bounds

作者: mymdeep | 来源:发表于2018-09-23 11:46 被阅读81次

    frame与bounds

    frame定义了一个view相对于父视图坐标系的位置和大小,它会影响center属性和bounds属性的size。

    这里需要做个特殊说明,frame的坐标是相对于父视图坐标系的,所以在设置的时候需要明白,父视图是什么,一个View的父视图就是这个view被谁addSubview了。如果view1. addSubview(view2) view2. addSubview(view3) 那么view3的父视图就是view2,而不是view1

    Bounds也是描述的是视图的位置和大小,只不过是在自己的坐标系上。也就是说它描述的是当前视图相对于自身坐标系的位置和大小。

    简而言之,就是frame和bounds的width和height是一样的,唯独坐标是不一样,frame的坐标是相对于父视图的,bounds是相对于自己的。
    下面举个例子看一下:

     let view1 = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight/3))
            view1.backgroundColor = UIColor.blue
            print("view1.frame:",view1.frame)
            print("view1.bounds:",view1.bounds)
            self.view.addSubview(view1)
            let view2 = UIView(frame: CGRect(x: 0, y: screenHeight/3, width: screenWidth, height: screenHeight/3))
            view2.backgroundColor = UIColor.red
            print("view2.frame:",view2.frame)
            print("view2.bounds:",view2.bounds)
            self.view.addSubview(view2)
            let view3 = UIView(frame: CGRect(x: 0, y: view2.frame.maxY, width: screenWidth, height: screenHeight/3))
            view3.backgroundColor = UIColor.yellow
            print("view3.frame:",view3.frame)
            print("view3.bounds:",view3.bounds)
            self.view.addSubview(view3)
            let view4 = UIView()
            view4.frame = CGRect(x: view3.bounds.minX, y: view3.bounds.minY, width: 100, height: 100)
            view4.backgroundColor = UIColor.brown
            view3.addSubview(view4)
    

    view1与view2,view3 平分屏幕,它们的父视图就是self.view
    而view4 是view3中的一个view,他的父视图是view3。
    所以这时,在对view3设置y坐标的时候,用的是view2.frame,因为他俩是平级的设置的坐标都是相对于父视图的
    而对view4设置坐标的时候用的是view3.bounds,因为view4是view3的子视图,view4的坐标原点(0,0)是view3的左上角,他的所有坐标都是相对于view3的左上角。所以此时可以使用view.bounds。
    可以看一下效果:


    image.png

    假设,如果这里不用view3.bounds而是用view3.frame可以看一下,上图中棕色的小方块便不会出现。
    这是因为view的数据坐标如下:

    view3.frame: (0.0, 490.666666666667, 414.0, 245.333333333333)
    view3.bounds: (0.0, 0.0, 414.0, 245.333333333333)
    

    这说明view3.frame.minY为490.666666666667,设置给view4以后,他相对于view左上角的y坐标为490.666666666667,这样肯定不会显示出来了。
    综合上面的例子可以很容易理解frame与bounds的关系了吧。

    更多内容关注我的公众号:


    image

    相关文章

      网友评论

          本文标题:『iOS布局』frame与bounds

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