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

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

2015-06-18 07:45:27 CSDN- Make___- 点击数:2396
id="iframeu848856_0" src="http://pos.baidu.com/mccm?rdid=848856&dc=2&di=u848856&dri=0&dis=0&dai=2&ps=320x96&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1459820806120&ti=ios%20%E9%80%9A%E8%BF%87%E8%AE%BE%E7%BD%AEUI%E6%8E%A7%E4%BB%B6%E7%9A%84center%E5%92%8Csize%E6%9D%A5%E8%AE%BE%E7%BD%AE%E4%BD%8D%E7%BD%AE%E6%97%B6%E9%9C%80%E6%B3%A8%E6%84%8F%EF%BC%81-IOS-%E7%AC%AC%E4%B8%83%E5%9F%8E%E5%B8%82&ari=1&dbv=0&drs=1&pcs=1072x541&pss=1072x321&cfv=21&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1459792006&ltu=http%3A%2F%2Fwww.th7.cn%2FProgram%2FIOS%2F201506%2F483996.shtml&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Df4l9N1nT4nqHvQR0dYsDgesJfnq_7mDTzqIi6k2sPrulKNlt1Gr__1oRvm3kEUym37O_6dth2v0VW7AqYzMHnK%26wd%3D%26eqid%3Dc97b5ff6001bd8f600000003570318f4&ecd=1&psr=1280x800&par=1280x732&pis=-1x-1&ccd=24&cja=true&cmi=8&col=zh-cn&cdo=-1&tcn=1459820806&qn=d954e40883f3c168&tt=1459820806110.260.401.402" width="336" height="280" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; vertical-align: bottom; margin: 0px;">

今天在设置按钮位置时,使用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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值