2011-06-03 19 views
0

我有一個擴展UIViewController的GUI類。Objective-C對象放置iPad

在其功能viewDidLoad,我想有一個UITextField實例。我希望那個實例不作爲一個簡單的CGRect對齊,設置它的偏移量,寬度和高度,但我希望它動態調整大小,使其填充整個屏幕寬度,從頂部,左側和右側偏移5px。正確的每個和20px的高度。這是如何完成的?

無論設備方向如何,所有方向都得到支持,它應該保持「相對絕對」的定位。

也許有像LayoutManager那樣的東西,例如Java中的GridBagLayout?

在此先感謝!

回答

2

你想要設置視圖的autoresizingMask屬性。

UIView *theParentView; // Assume this is the root view that owns the whole screen 

CGRect textFieldFrame = CGRectMake(5, // Top-left corner x position 
            5, // Top-left corner y position 
            [theParentView bounds].width - 10, // Width 
            20); // Height 

UIView *myView = [[UIView alloc] initWithFrame:textFieldFrame]; 

// This will make it resize with the parent view, maintaining margins 
[myView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 

[theParentView addSubview:myView]; 

[myView release]; 

這些都可以從Interface Builder的形式完成。甚至有一個動畫展示瞭如何在Interface Builder中調整視圖。

+0

完美!剛剛好!謝謝! – arik 2011-06-03 20:05:20

-1

OS中沒有內置任何東西。我已經看到了一些類似於你所問的東西的幾個版本,其中包括我自己的問題GitHub

+1

自動調整掩碼將很好地處理這個特定的用例。 – 2011-06-03 19:53:01

+0

這是事實,我沒有像我應該那樣仔細閱讀這個問題。但是它更接近他的第二部分,關於Java佈局管理器。 – 2011-06-03 20:10:45

1

請記住,UIViewController本身不顯示,但它管理視圖對象的層次結構。您可以在-viewDidLoad中創建文本字段,但需要將其添加到視圖控制器的視圖中才能看到它。你會做這樣的事情:

CGFloat inset = 5.0; 
CGFloat fieldHeight = 20.0; 
CGRect fieldRect = CGRectMake(inset, 
           inset, 
           self.view.size.width - (2 * inset), 
           fieldHeight); 
UITextField *field = [[UITextField alloc] initWithFrame:fieldRect]; 
field.autoResizingMask = UIViewAutoresizingFlexibleWidth; 
[self.view addSubview:field]; 
[field release]; 

當然,如果您需要參考該領域再以後,你還需要一個指針藏匿於它的屬性或伊娃。

+0

爲什麼fieldHeight +插入CGRectMake中的y值?那會讓它在25,但在UIKit中,你需要左上角,而不是左下角。 – 2011-06-03 20:26:08

+0

@BJ荷馬,好趕上 - 謝謝。我希望他們沒有翻轉Cocoa Touch的座標系統! – Caleb 2011-06-04 09:50:17