每Apple Documentation,這裏有一個視圖的框架,邊界和中心之間的關係:
雖然可以更改 獨立於其他的框架,範圍和中心性,改變一個屬性影響別人在以下幾個方面 :
- 當您設置的幀屬性,在bounds屬性的大小變化值相匹配的框架矩形的新尺寸。中心屬性中的值
類似地更改以匹配框架矩形的新中心點
。
- 設置中心屬性時,框架中的原點值會相應更改。
- 當您設置邊界屬性的大小時,frame屬性中的大小值將更改爲與邊界矩形的新大小相匹配。
所以,回答你的問題,改變X,在視圖邊界Y位置應該不會影響幀。大多數情況下邊界以(0,0)開始。將高度或寬度更改爲負值可以使邊界的起點變爲負值。
編輯:回答OP問題 - 不,更改界限的位置不會以任何方式影響框架。由於界限是以視圖自己的座標系統爲參照的,所以在自我座標系統上改變X,Y並不會改變監視座標系統中的位置。
您可以通過使用兩個自定義視圖這樣的嘗試:
UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 100.0f, 150.0f, 150.0f)];
view1.backgroundColor = [UIColor redColor];
NSLog(@"view1.bounds = %@", NSStringFromCGRect(view1.bounds));
NSLog(@"view1.frame = %@", NSStringFromCGRect(view1.frame));
UIView* view2 = [[UIView alloc] initWithFrame:CGRectInset(view1.bounds, 20.0f, 20.0f)];
view2.backgroundColor = [UIColor yellowColor];
NSLog(@"view2.bounds = %@", NSStringFromCGRect(view2.bounds));
NSLog(@"view2.frame = %@", NSStringFromCGRect(view2.frame));
NSLog(@"view1.bounds = %@", NSStringFromCGRect(view1.bounds));
NSLog(@"view1.frame = %@", NSStringFromCGRect(view1.frame));
NSLog(@"view2.bounds = %@", NSStringFromCGRect(view2.bounds));
NSLog(@"view2.frame = %@", NSStringFromCGRect(view2.frame));
[view1 addSubview:view2];
,然後更改綁定像這樣子視圖:
CGRect frame = view2.bounds;
frame.origin.x += 20.0f;
frame.origin.y += 20.0f;
view2.bounds = frame;
改變邊界不會在所有影響幀。而這兩種觀點看起來一樣在屏幕上:
![enter image description here](https://i.stack.imgur.com/EVBZ4.png)
![enter image description here](https://i.stack.imgur.com/VhXCv.png)
最後,通過改變父視圖的邊界儘量見下圖:
CGRect frame = view1.bounds;
frame.origin.x += 20.0f;
frame.origin.y += 20.0f;
view1.bounds = frame;
![enter image description here](https://i.stack.imgur.com/xTFRz.png)
這是一個很好的問題。爲什麼不運行它,設置一個brakpoint並看看? –
謝謝!我已經運行了它,但框架沒有改變,只是想看看我是不是正確地理解了這個概念。 – Smashkon