2012-08-29 60 views
2

有沒有像您可以使用Android佈局相對於彼此的任何位置視圖?iOS:相對定位像Android的佈局

例如:您有動態設置爲可變長度的字符串,一上一下兩個其他UILabels,和你想要的底部標籤直接出現在頂部標籤的最後一行之下,不管有多少行頂部標籤結束了。

另一個例子:與上述情況相同,但其中一個標籤有時隱藏。您希望生成的標籤在父級中垂直居中,而不管它是一個標籤還是兩個標籤。

Android的線性佈局和相對佈局使這很容易做到,但我無法弄清楚如何做到這一點是iOS。可以做到嗎?

回答

0

你可以在iOS6中使用AutoLayout來做到這一點。對於應該在6.0之前的iOS中運行的應用程序,您必須自己完成,但這並不複雜。

其實我已經實現a class to do this(那是很久以前的事,我希望它仍然有效,但沒有理由不)。這是OHStackView類是UIView的子類,它可以水平或垂直自動佈局子視圖以堆疊或對齊它們。

您可以要求OHStackView水平或垂直堆疊子視圖(一個在另一個之上等),或者對齊其頂部/底部/左側/右側邊界或其中心,甚至在每個子視圖之間指定填充。每當子視圖中的一個改變其框架或大小時,OHStackView將自動重新佈局所有依賴視圖以重新排列所有內容。 (延續與你的兩個UILabels,以sizeToFit一個簡單的調用你的標籤,使他們調整自己的大小以他們的內容將重新佈局周圍的一切都自動地)

提供了可以隨意測試的示例項目。

注:IIRC,我的子類不考慮子視圖的「隱藏」屬性。但是,您可以通過在其layoutSubview實現的for循環中添加條件(如if (v.hidden) continue;)來輕鬆添加對此行爲的支持,以便僅在佈局算法中考慮非隱藏視圖。

HTH

+1

AutoLayout聽起來像我所需要的。我無法相信它現在才被添加! –

+0

是的,但我想這主要是因爲iPhone設備都具有相同的屏幕尺寸,與Android設備相反。因此,一般來說,您不需要Android中的佈局,您可以爲所有內容定位您的內容。至少到現在爲止,但由於未來iPhone 5的屏幕尺寸可能與其前一版本不同,因此AutoLayout將會更加需要。無論如何,我的OHStackView仍然可以爲需要在6.0之前與iOS兼容的應用程序完成這項工作 – AliSoftware

0

我一直在尋找是否有可能很長一段時間。據我所知,現在是不可能的。我不記得我在哪裏閱讀這篇文章,但是使用ios6將是可能的。您可以使用sizeWithFont方法來檢測您的UILabel的大小,而不是使用Android的線性佈局,您可以設置它們的框架來定位它們。首先,您需要設置其文本,以根據其字體系列來查找它們的大小。另一件你可以使用的方法是sizeToFit。不幸的是,我不知道如何使用它。不過,你可以投籃。那時候,我發現了這個。也許你可以使用它https://github.com/scalessec/CSLinearLayoutView