2013-07-18 108 views
2

我試圖創建一些我認爲使用iOS自動佈局的簡單方法。我一直在這上幾天,買了一本書,並嘗試了各種關鍵字搜索組合。任何人之前做過這些,可以指引我正確的方向?iOS自動佈局:3列標籤佈局,中間列寬度可變

我想要3列UILabels,列中排列,與中間一個(其中有更多的內容)是可變寬度取決於iPad的方向。

我可以得到這個工作,但是一旦iPad從橫向旋轉到縱向(因此減少了中間標籤可用的寬度),中間標籤內容就會被切斷。 即中間標籤高度不調整大小。

這就是我想要達到的目標: This is what I want to achieve

一旦你旋轉爲縱向: Once you rotate to portrait

這裏是我的約束和景觀層次: Here are my constraints and View hierarchy

如果我給中間的UILabel高度約束'小於或等於'250(它需要顯示所有內容的高度,以狹窄的portait模式顯示),一旦iPad重新定位,標籤內容將擴展以適應新的widt小時,但也不再與任何一方的其他標籤的頂部對齊。

錯誤垂直對齊 wrong alignment

這裏是我的中間標籤 constraints on middle label

(即高度等於250具有1的優先級,因爲它是一個生成的約束,我不能擺脫的約束。 )

我已經嘗試瞭如此多的內容擁抱和壓縮抵抗的組合,我確信這將是答案,即需要UILabel幀來擁抱內容。我顯然不理解,我也應該。

回答

1

好了,終於想出找到這個計算器的問題後: Link to answer
它現在的工作,因爲我本來希望

我所要做的就是設置換行符「自動換行」,並更新優選的寬度上的裝置取向,像這樣

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
    if (UIDeviceOrientationIsLandscape(interfaceOrientation)) { 
     self.middleLabel.preferredMaxLayoutWidth = 600; 
    } else { 
     self.middleLabel.preferredMaxLayoutWidth = 314; 
    } 
} 

因此,綜上所述,這是增加內容擁抱,降低了高度約束的優先級和對設備取向更新preferredMaxLayoutWidth的組合。 不過,將硬編碼的值放入佈局代碼中感覺不對。能想出更好的辦法嗎?

0

改變灰色框的大小編程,在界面生成器,用於

左文本字段設置該屬性 https://dl.dropboxusercontent.com/u/1172778/left.png

中間文本字段 https://dl.dropboxusercontent.com/u/1172778/middle.png

文本將填補容器(灰色框在您的圖片)。

對不起,我的英語不好。

+0

我使用自動佈局,而不是舊的彈簧和支柱,或者你是說我應該關閉該UILabel的自動佈局? –

+0

如果您使用xib,請禁用。使用故事板,您將禁用所有屏幕。 – Elto

+0

謝謝,但我轉移到自動佈局,以幫助在主內容視圖中佈局元素。我真的很想知道這是否可以使用自動佈局 –