ios 通過設定UI控制元件的center和size來設定位置時需注意!
阿新 • • 發佈:2019-01-26
<iframe 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;"></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,才能正確設定位置。