iOS中frame和Bounds之間的區別

2021-07-26 23:55:09 字數 2594 閱讀 1067

frame

frame是每個view必備的屬性,代表的是當前檢視的位置和大小,沒有設定他,當前檢視是看不到的。位置需要有參照物才能確定,數學中我們用座標系來確定座標系中的某個點的位置,ios中有他特有的座標系,如下圖:

ios座標系

• 在ios座標系中以左上角為座標原點,往為x正方向,往是y正方向

• frame中的位置是以父檢視的座標系為標準來確定當前檢視的位置

• 同樣的預設情況下,本檢視的左上角就是子檢視的座標原點

• 更改frame中位置,則當前檢視的位置會發生改變

• 更改frame的大小,則當前檢視以當前檢視左上角為基準的進行大小的修改

bounds

bounds是每個view都有的屬性,這個屬性我們一般不進行設定,他同樣代表位置和大小;每個檢視都有自己的座標系,且這個座標系預設以自身的左上角為座標原點,所有子檢視以這個座標系的原點為基準點。bounds的位置代表的是子檢視看待當前檢視左上角的位置;bounds的大小代表當前檢視的大小;

• 更改bounds中的位置對於當前檢視沒有影響,相當於更改了當前檢視的座標系,對於子檢視來說當前檢視的左上角已經不再是(0,0), 而是改變後的座標,座標系改了,那麼所有子檢視位置也會跟著改變

• 更改bounds的大小,bounds的大小代表當前檢視的長和寬,修改長寬後,中心點繼續保持不變, 長寬進行改變;通過bounds修改長寬看起來就像是以中心點為基準點對長寬兩邊同時進行縮放;

frame和bounds

有如下圖:

view a是最頂層檢視, 因此他的資訊如下:frame origin:0, 0 size :550 * 400

bounds origin:0, 0 size 550 * 400

因為是view a是頂層檢視,所以其實相當於覆蓋在框架上,因此位置從父檢視的(0, 0)開始,大小為550*400預設情況下,本檢視的座標系是沒有發生改變的即當前檢視(view a)的左上角就是所有子檢視的原點,大小就是當前檢視的大小.

view b是view a的子檢視,因此他的資訊如下: frame origin:200, 100 size :200 * 250

bounds origin:0, 0 size :200 * 250

因為view b是view a的子檢視,所以view b的frame位置需要以view a的左上角為參照,因此位置為(200, 100), 大小為200*250bounds在預設情況下本檢視的座標系是沒有發生改變的即當前檢視(view b)的左上角就是當前檢視所有子檢視的原點.

上面這種是普通的情況,也就是沒有更改bounds的時候,下面我們來看更改bounds的例子, 如下圖:

在上乙個例子的基礎上,我們更改了view a的bounds

後,view b看待view a的左上角就已經發生改變了;這個時候我們看待view a的左上角就不是座標原點

了,而是我們通過bounds設定後的座標,如圖也就是(0, 100);在view b的frame沒有儲存不變的基礎上,我們view b的位置向上移動了100

在第一例的基礎上,更改了bounds中x後,效果圖如下:

ios bounds 3 總結

1、frame不管對於位置還是大小,改變的都是自己本身

2、frame的位置是以父檢視的座標係為參照,從而確定當前檢視在父檢視中的位置

3、frame的大小改變時,當前檢視的左上角位置不會發生改變,只是大小發生改變

1、bounds改變位置時,改變的是子檢視的位置,自身沒有影響;其實就是改變了本身的座標系原點,預設本身座標系的原點是左上角

2、bounds的大小改變時,當前檢視的中心點不會發生改變,當前檢視的大小發生改變,看起來效果就像縮放一樣。

**:

iOS開發 View中frame和bounds區別

開發中調整view的時候的經常會遇到frame和bounds,剛開始看的時候不是很清楚,不過看了一下官方文件,frame是確定檢視在父檢視中的位置,和本身的大小,bounds確定可以確定子檢視在當前檢視中的位置,還可以改變view的大小,如果bounds確定大小,那麼view的檢視優先選擇的boun...

iOS開發 View中frame和bounds區別

開發中調整view的時候的經常會遇到frame和bounds,剛開始看的時候不是很清楚,不過看了一下官方文件,frame是確定檢視在父檢視中的位置,和本身的大小,bounds確定可以確定子檢視在當前檢視中的位置,還可以改變view的大小,如果bounds確定大小,那麼view的檢視優先選擇的boun...

關於ios中bounds與frame

1.ios中的bounds是指相對於檢視自己的座標,所以預設view.bounds.origin 0,0 2.ios中的frame是指相對于父檢視的座標 3.當bounds改變的時候,會影響到frame 比如下面的 cgrect frame cgrectmake 0,0,200,200 uilabe...