2011-12-23 47 views
2

(我的英語不是很好笑)當我改變的UIView的bounds.size.height在frame.origin.y變化

我定義一個UIView對象作爲子視圖,當我改變subview.bounds。 size.height,subview.frame.origin.y改變了,我的代碼有什麼問題嗎?

這裏是我的代碼:

- (IBAction)touch 
{ 
    static int i = 1; 
    NSLog(@"%d: Bounds: %@", i, NSStringFromCGRect(self.subView.bounds)); 
    NSLog(@"%d: Frame: %@", i, NSStringFromCGRect(self.subView.frame)); 
    self.subView.bounds = CGRectMake(0.f, 0.f, self.subView.bounds.size.width, self.subView.bounds.size.height + 50); 
    NSLog(@"%d: Bounds: %@", i, NSStringFromCGRect(self.subView.bounds)); 
    NSLog(@"%d: Frame: %@", i, NSStringFromCGRect(self.subView.frame)); 

    i++; 
} 

系統輸出:

2011-12-23 12:11:29.316 Angry[7959:f803] 1: Bounds: {{0, 0}, {320, 100}} 
2011-12-23 12:11:29.318 Angry[7959:f803] 1: Frame: {{0, 0}, {320, 100}} 
2011-12-23 12:11:29.319 Angry[7959:f803] 1: Bounds: {{0, 0}, {320, 150}} 
2011-12-23 12:11:29.320 Angry[7959:f803] 1: Frame: {{0, -25}, {320, 150}} 

2011-12-23 12:11:30.920 Angry[7959:f803] 2: Bounds: {{0, 0}, {320, 150}} 
2011-12-23 12:11:30.921 Angry[7959:f803] 2: Frame: {{0, -25}, {320, 150}} 
2011-12-23 12:11:30.922 Angry[7959:f803] 2: Bounds: {{0, 0}, {320, 200}} 
2011-12-23 12:11:30.923 Angry[7959:f803] 2: Frame: {{0, -50}, {320, 200}} 

2011-12-23 12:11:32.080 Angry[7959:f803] 3: Bounds: {{0, 0}, {320, 200}} 
2011-12-23 12:11:32.082 Angry[7959:f803] 3: Frame: {{0, -50}, {320, 200}} 
2011-12-23 12:11:32.083 Angry[7959:f803] 3: Bounds: {{0, 0}, {320, 250}} 
2011-12-23 12:11:32.084 Angry[7959:f803] 3: Frame: {{0, -75}, {320, 250}} 

回答

6

改變邊界確實會影響幀:

雖然可以改變幀,邊界,和中心屬性 獨立於其他人,對其中一個屬性的更改會影響其他人 在以下幾個方面:

  • 當您設置的幀屬性,在bounds屬性的大小值 變化相匹配的框架矩形的新尺寸。中心屬性 中的值類似地更改以匹配 框架矩形的新中心點。
  • 當您設置中心屬性時,框架中的原點值相應地更改 。
  • 當您設置邊界屬性的大小時,框架屬性 中的大小值會更改爲與邊界矩形的新大小相匹配。
+0

是的,你是對的。但UIView.bounds.size.height改變了,UIView.frame.origin.y也改變了。這似乎很奇怪。 Apple文檔沒有關於此的定義。 – LekHo 2011-12-23 06:10:17

+0

以下是文檔鏈接:https://developer.apple.com/library/ios/documentation/windowsviews/conceptual/viewpg_iphoneos/WindowsandViews/WindowsandViews.html – cyrilchampier 2014-09-10 09:48:36

0

我有類似的問題:

view.frame = CGRectMake(x, y, width, height); // y felt to 0 

的問題是身高,我試圖設置負的高度。不確定,但我已經閱讀了一些關於自動調整錯誤視圖參數的內容,但在網絡上沒有發現任何內容。 所以你可以檢查你的CGRect參數。

希望這可以幫助某人

2

我剛碰到同樣的問題。結果是,視圖上的邊界變化會調整視圖相對於位於視圖中心的錨點的大小。換句話說,如果你有一個帶有幀(0,0,0,0)的視圖,然後將它的邊界改爲(0,0,100,100),那麼新的幀將是(-50,-50,100,100)。

最快的解決辦法是記住幀的原點改變邊界前,然後設置幀的起源回到原來的值算賬:

CGPoint originBeforeResize = self.frame.origin; 
self.bounds = CGRectMake(0, 0, SOME_NEW_WIDTH, SOME_NEW_HEIGHT); 
self.frame = CGRectMake(originBeforeResize.x, originBeforeResize.y, 
         self.frame.size.width, self.frame.size.height);