ios 通过设置UI控件的center和size来设置位置时需注意!

今天在设置按钮位置时,使用center和size属性来控制,但是发现怎么也不对,研究了一下发现,当使用UI控件的center和size属性来控制位置时,好像是有先后顺序的:

下面看一段代码,将红色的view在控制器view中居中。

首先是设置center的代码:

    CGPoint center = redView.center;
    center.x = self.view.frame.size.width / 2;
    center.y = self.view.frame.size.height / 2;
    redView.center = center;
然后是设置尺寸的代码:

    CGRect frame = redView.frame;
    frame.size = CGSizeMake(150, 150);
    redView.frame = frame;


这样设置的结果是:



显然,之前设置的center属性貌似变成了origin属性,红色view的origin居中了,而center跟着就偏了。

而如果先设置尺寸,在设置center,即将上面两段代码的顺序调换,结果就变成了:


可以看到按钮位置正确了。


这里比较容易造成混淆,难道必须先设置位置,再设置尺寸,才能正确?当然不是,来分析一下上面的代码:

    CGPoint center = redView.center;
    center.x = self.view.frame.size.width / 2;
    center.y = self.view.frame.size.height / 2;
    redView.center = center;
<pre name="code" class="objc">    CGRect frame = redView.frame;
    frame.size = CGSizeMake(150, 150);
    redView.frame = frame;

 首先,按钮没有尺寸,即它的尺寸是(0, 0),这时,给它设置一个center,这个设置是没有问题的,但是要注意,这时的控件就是一个点,它的origin和center是一样的,设置了center之后,origin也就变成跟center一样的值了。 

即这时,按钮的center.x = frame.origin.x = self.view.frame.size.width / 2;

 center.y =frame.origin.y = self.view.frame.size.height / 2;

然后,给按钮设置尺寸,需要注意的是,设置按钮的尺寸,需要先取出按钮的frame,修改之后再替换原来的frame。这里就出问题了,因为frame属性是包括了origin的,即取出了frame之后,改变了frame.size,但是frame.origin还是上面的跟center一样的值,这样,我们用新的frame替换原来的frame的效果就是,view的origin不变,只改变了大小,所以就出现了上面的情况。


所以,如果要通过设置center和frame.size来控制控件的位置,只有先设置frame.size再设置center,才能正确设置位置。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值