iOS开发 --frame和bounds区别详解

frame和bounds

首先来说一下frame和bounds的个人理解:

frame:view.frame的意思是这个view在父视图本地参考坐标系(bounds)上的位置与大小
bounds:view.bounds是这个view自身的本地参考坐标系(位置与大小)供其子视图使用

这么说你肯定不太懂,但是看我带图洗脑

    // 创建view1
        let view1 = UIView()
        view1.backgroundColor = UIColor.yellow
        view1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
        self.view.addSubview(view1)

这里写图片描述

请记住这个黄色视图的center(中点),当你去修改bounds会跟它相关

1.bounds的size属性

// 设置bounds
view1.bounds = CGRect(x: 0, y: 0, width: 50, height: 50)

这里写图片描述

只改变view1.bounds.size,这个时候view1的center不变,view1的大小随center缩放,修改后view1.frame也随之发生变化view1.frame = (75.0, 75.0, 50.0, 50.0)

2.bounds的origin属性

        // 设置bounds
        let view1 = UIView()
        view1.backgroundColor = UIColor.yellow
        view1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
        view1.bounds = CGRect(x: -20, y: -20, width: 100, height: 100)
        self.view.addSubview(view1)
        // view1上添加子视图
        let view2 = UIView()
        view2.backgroundColor = UIColor.red.withAlphaComponent(0.5)
        view2.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
        view1.addSubview(view2)

这里写图片描述

> 由此可见:
1.因为view1.bounds.size没变所以view1.frame没有改变,
 2.view1.bounds.origin改变影响了view1子视图的位置,所以view1.bounds.origin是view2.frame.origin的参考
 3.view1.bounds.origin的修改是根据view1左上角为原点参考

3.bounds的x,y,width和height四个属性同时修改

    // 设置bounds
        let view1 = UIView()
        view1.backgroundColor = UIColor.yellow
        view1.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
        view1.bounds = CGRect(x: -20, y: -20, width: 70, height: 70)
        self.view.addSubview(view1)
        // 子视图frame不变
        let view2 = UIView()
        view2.backgroundColor = UIColor.red.withAlphaComponent(0.5)
        view2.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
        view1.addSubview(view2)

这里写图片描述

由此可见,同时修改bounds的4个属性,
1.先修改bounds.size属性,将view1的位置和大小设置好得出修改后的frame
2.然后根据修改后view1左上角原点来修改view1.bounds.origin,从而改变view1的子视图的位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值