1. 程式人生 > >ios 通過設定UI控制元件的center和size來設定位置時需注意!

ios 通過設定UI控制元件的center和size來設定位置時需注意!

<iframe id="iframeu848856_0" src="http://pos.baidu.com/mccm?rdid=848856&amp;dc=2&amp;di=u848856&amp;dri=0&amp;dis=0&amp;dai=2&amp;ps=320x96&amp;dcb=BAIDU_SSP_define&amp;dtm=BAIDU_DUP_SETJSONADSLOT&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1459820806120&amp;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&amp;ari=1&amp;dbv=0&amp;drs=1&amp;pcs=1072x541&amp;pss=1072x321&amp;cfv=21&amp;cpl=5&amp;chi=1&amp;cce=true&amp;cec=UTF-8&amp;tlm=1459792006&amp;ltu=http%3A%2F%2Fwww.th7.cn%2FProgram%2FIOS%2F201506%2F483996.shtml&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Df4l9N1nT4nqHvQR0dYsDgesJfnq_7mDTzqIi6k2sPrulKNlt1Gr__1oRvm3kEUym37O_6dth2v0VW7AqYzMHnK%26wd%3D%26eqid%3Dc97b5ff6001bd8f600000003570318f4&amp;ecd=1&amp;psr=1280x800&amp;par=1280x732&amp;pis=-1x-1&amp;ccd=24&amp;cja=true&amp;cmi=8&amp;col=zh-cn&amp;cdo=-1&amp;tcn=1459820806&amp;qn=d954e40883f3c168&amp;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;"></iframe>

今天在設定按鈕位置時,使用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,才能正確設定位置。