美文网首页
iOS中控件的Frame属性和Bounds属性的区别

iOS中控件的Frame属性和Bounds属性的区别

作者: 魔力双鱼 | 来源:发表于2019-07-12 17:57 被阅读0次

    在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性

    frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)其中的坐标是我的左上角坐标相对于我的父视图左上角的坐标。如果我修改坐标,x+50,y+50,那么我就会相对于我的父视图移动,相对于父视图,我向右移动50,向下移动50

    bounds指的是:该view在本身坐标系统中的位置和大小。(参照点是本身坐标系统)其中的坐标是我的子视图左上角的坐标相对与我的左上角的坐标。如果我修改坐标,x+50,y+50,那么我的子视图就会相对我进行移动,相对于我,子视图向左移动50,向上移动50

    -(CGRect)frame{
    
     returnCGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
    
    }
    
    -(CGRect)bounds{
    
      returnCGRectMake(0,0,self.frame.size.width,self.frame.size.height);
    
    }
    

    实际使用情况是这样的:

    1.如果我在a视图,我需要在a视图下创建一个子视图b,并规定b视图相对于a视图的坐标和大小,使用Frame即可,不需要对Bounds做任何操作

        UIView * a;
    
        UIView * b;
    
        [a addSubview:b];
    
        b.frame = CGRectMake(100, 100, 100, 100);
    

    2.如果我在b视图,我是a视图的子视图,我想要修改我自己的大小,但是我又不想知道我相对于a视图的坐标,那就使用Bounds,origin都设为0

        b.bounds = CGRectMake(0, 0, 50, 50);
    

    3.如果我在b视图,我是a视图的子视图,我想要重新设计我的视图的坐标,方便我创建我的自己的子视图时的坐标转换,那么我就可以设置Bounds,origin的大小就是我左上角的坐标,我再创建的子视图就会以我的这个坐标来进行参照坐标

    b.bounds = CGRectMake(-50, -50, b.bounds.size.width, b.bounds.size.height);
    

    4.如果我是b视图,我的视图旋转了,我的Frame和Bounds就会演变成下面的样子

    1.png

    以上所述的1和2场景比较常见,其它场景都是及其少见,如果你想修改坐标,就使用Frame,如果你想修改大小,就使用Bounds

    相关文章

      网友评论

          本文标题:iOS中控件的Frame属性和Bounds属性的区别

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