美文网首页
bounds和frame的区别

bounds和frame的区别

作者: 敌敌味丶 | 来源:发表于2018-04-12 12:30 被阅读0次
    //底部view   灰色
    UIView *superview = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
    superview.backgroundColor = [UIColor grayColor];
    [self.view addSubview:superview]; 
    
    //bounds   红色
    UIView *view = [[UIView alloc] init];
    view.backgroundColor = [UIColor redColor];
    view.bounds = CGRectMake(0, 0, 100, 50);
    [superview addSubview:view];
    
    //frame    黄色
    UIView *view2 = [[UIView alloc] init];
    view2.backgroundColor = [UIColor yellowColor];
    view2.frame = CGRectMake(10, 50, 100, 100);
    [superview addSubview:view2];
    
    设置bounds的为红色view的打印

    此情况下,在view.bounds = CGRectMake(x, y, W, H)中,无论x、y怎么设置最后打印出的结果都是(-W/2, -H/2, W, H).

    若取用同级的view的bounds来作为自己的frame,坐标就直接为0:
    //bounds   蓝色
    UIView *view3 = [[UIView alloc] init];
    view3.backgroundColor = [UIColor blueColor];
    view3.frame = view2.bounds;
    [superview addSubview:view3];
    
    蓝色的view的打印
    若在初始化时先使用bounds,再修改所使用的view的bounds的坐标,此时的view的坐标就会相对参照的view向反方向移位。
    //参照的 bounds    绿色
    UIView *view4 = [[UIView alloc] initWithFrame:superview.bounds];
    view4.backgroundColor = [UIColor greenColor];
    superview.bounds = CGRectMake(60, 10, 200, 200);
    [superview addSubview:view4];
    
    绿色的view

    总结:

    • 单独赋值bounds时,无论bounds的坐标怎么设置最后frame的结果都是(-W/2, -H/2, W, H)。

    • 若取用同级的view的bounds来作为自己的frame,坐标就直接为0。

    • 若用父级的bounds给frame赋值后,修改bounds的size会影响frame的size。而且对center不会造成影响。
      除非迫不得已,否则不要修改bounds的坐标。

    相关文章

      网友评论

          本文标题:bounds和frame的区别

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