2011-06-29 59 views
3

佈局iPhone UI項目的最佳方式是什麼?現在我正在使用CGRectMake並指定每個UI項目(標籤,視圖,按鈕等)的確切x和y座標,並將每個UI項目添加到當前視圖。如何佈置「相對」而不是絕對位置的項目?

我看到的一個問題是,如果其中一個項目改變高度或寬度,我將不得不調整其他UI項目的x和y座標,因此維護將是一個挑戰。

有沒有其他方法可以做到這一點?在HTML/CSS中,我習慣於僅使用邊距來放置項目,而不是絕對定位。你推薦我做什麼來保持維護的方便和無壓力?

回答

1

我一直在做的是使用全局常量來設置高度,寬度,xoffset和yoffsets。例如。我知道我要2個按鈕旁邊的對方,A和B,其中A是20,從起點20和B是A的20右:
Constants.m:

CGFloat buttonHeight = 50, buttonWidth = 100; 
CGFloat buttonAXoffset = 20, buttonAYoffset = 0; 
CGFloat buttonBXoffset = 20, buttonBYoffset = 0; 
CGFloat initialXoffset = 0, initialYoffset = 20; 

(並使用Constants.h來聲明extern CGFloat blah
要繪製按鈕,請設置CGFloat creatorCursorX = initialXoffset, creatorCursorY = initialYoffset;這將成爲您的相對光標。
然後,就在上面創建的按鈕A,做creatorCursorX += buttonAXoffset; creatorCursorY += buttonAYOffset;,並使用creatorCursorXcreatorCursorY設置其位置和buttonHeightbuttonWidth 創建按鈕A之後,做creatorCursorX += buttonWidth;

因此,當你要製作按鈕B,你已經有一個光標,您可以用它來放置按鈕B相對於按鈕A,就像上面一樣。之前添加偏移量,之後添加大小。這使得切換按鈕(和其他佈局項目)變得很容易。
您可以編輯此方法以將項目放置在屏幕上。
順便說一句,要啓動一個新行的光標,只需設置creatorCursorX = initialXoffset再次加y離creatorCursorY

我不是這方面的專家,但我發現這個方法是最有效的並且稍後可以輕鬆調整。無需對代碼進行篩選,只需對塊進行整理以便下訂單,然後轉至Constants.m即可更改尺寸。

1

不,據我所知,相對佈局在iOS中是不可能的。您可以使用接口生成器來設計UI,這將更容易定位UI元素。

你也可以考慮使用autoResizingMask財產UIView。即,

一個整數位掩碼,用於確定接收者在其超視圖界限更改時如何調整自身大小。

1

我不認爲有一種自動的方法來實現這一點。
我認爲你唯一的選擇就是編寫一個方法,但即使這樣做也很棘手,你需要確定受影響的元素並知道重新定位哪些元素(參見下面的一個非常簡單的例子)。

-(void)adjustUIElements:(CGSize)newSize{ 

    //for example 
    button1.frame = CGRectMake(
     (button1.frame.origin.x + newSize.width), 
     (button1.frame.origin.y + newSize.height), 
     button1.frame.size.width, 
     button1.frame.size.height); 

    //etc. 
} 

這個例子的好處是,只要有尺寸變化,您都可以運行它。這需要一點時間才能正確使用,但是您可以在任何您認爲合適的功能中重複使用它。

0

我在面向公衆的蘋果網站上找不到任何關於它的東西,但我讀到了一個傳言網站,蘋果將在Lion中引入一個名爲Cocoa Autolayout的新版面系統。不幸的是,它將不能用於下一個iOS版本。

我不想鏈接到任何特定的文檔,但在您最喜愛的搜索引擎上搜索「Cocoa Autolayout」會給您一些關於自動佈局如何工作的一般信息。

如果您是註冊的iOS開發人員,則應該有權訪問有關該主題的WWDC會議之一。