iOS UIView

iOS UIView

主要内容:

  1. frame 与 bounds 的区别

frame 与 bounds 的区别

先给个定义:

  • frame

    该view在 superView 坐标系统中的位置和大小。(参照点是父亲的坐标系统)

  • bounds

    该 view 在自身坐标系统中的位置和大小。(参照点是本身坐标系统)

上面这段话可能有点难以理解。来举个例子:我们假设有一个绝对的、以显示器左上角作为坐标原点的坐标系 Z,考虑以下两种情况:(代码不长,请仔细看代码)

第一种情况:

  • 代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self.view setBackgroundColor:[UIColor grayColor]];
    
        UIView *view1 = [[UIView alloc] init];
        [view1 setFrame:CGRectMake(50, 50, 200, 200)];
        [view1 setBackgroundColor:[UIColor redColor]];
        [self.view addSubview:view1];
        // 则self.view的子视图view1在绝对坐标系Z中的坐标是(50, 50)
    
        UIView *view2 = [[UIView alloc] init];
        [view2 setFrame:CGRectMake(50, 50, 50, 50)];
        [view2 setBackgroundColor:[UIColor greenColor]];
        [view1 addSubview:view2];
        // 则view1的子视图view2在绝对坐标系Z中的坐标是(100, 100)
    }
  • 结果:

第二种情况:

在第一种情况的基础上增加下面这行代码修改 view1 的 bounds:

[view1 setBounds:CGRectMake(50, 50, 200, 200)];
// 即把view1的bounds.origin从 (0, 0)修改为(50, 50)
// 则view1的子视图view2在绝对坐标系Z中的坐标变成了(50, 50)
  • 结果:

比较

比较以上两种情况,其实我们可以发现:设置了 view1frame 之后,实际上已经确定了 view1 的位置和大小,此时 view1 的起始位置(最左上角的点)是确定了的。当我们修改 bounds 的时候,实际上不会对 view1 的位置有任何影响,而是移动了 view1 的自身坐标系。在此例中,view1 起始位置的绝对坐标为(50, 50)已经确定,设置 view1.bounds.origin 为(50, 50)的时候,表示 view1 的起始位置在它自身坐标系的(50, 50)处,而此时 view1 的位置不动,实质上是将坐标系原点往左上方向移动了

总结

因此我们可以知道,对一个 view 来讲,它在 superView 中的位置仅仅由 frame 决定,而它的 bounds 仅仅能决定它所有子视图的位置以及它自身的大小。

如果嫌写得太短的话可以参考以下两篇博客(各种详细..):

ios view的frame和bounds之区别(位置和大小) - 其实并不难,是你太悲观 - 博客频道 - CSDN.NET

视图UIView的frame、bounds与center属性 - Puzhi的专栏 - 博客频道 - CSDN.NET

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值