2012-11-05 118 views
0

我對ios很新穎。在寫我的第一個應用程序時,我遇到了自動佈局僅適用於ios 6.0。而且我希望讓我的應用程序至少有5.0個ios。ios自動佈局類似

也許有人會知道如何使這個沒有自動佈局。

我有標籤,其具有動態文本,1row或2行或3行取決於用戶的設置。在它下面我有uitextfield。使用自動佈局功能,我無需擔心所有的工作,文本字段可以很好地放在上面的1 2或3行文本中(調整大小,自動移動)。

那麼我應該如何做到這一點沒有自動佈局?

回答

2

沒有自動佈局,你必須在代碼中處理這個問題。這樣做的推薦方法是將您的容器視圖(包含您的標籤和文本字段的視圖)進行子類化,並覆蓋layoutSubviews方法。在那裏,您可以根據您所需的條件手動設置視圖子視圖的框架(例如,label text metrics)。

編輯:這裏的東西,可能是在containverViewlayoutSubviews方法(從我的頭頂類型)一個具體的例子:

// Those could be IBOutlets, or obtained by inspecting self.subviews 
UILabel *label = self.label; 
UITextField *textField = self.textField; 

// Determine the labelSize, we could limit the maxSize (especially the height) manually here 
CGSize maxSize = self.bounds.size; 
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode]; 

// Set the computed label size 
CGRect labelFrame = label.frame; 
labelFrame.size = labelSize; 
label.frame = labelFrame; 

// Now move the textField just below the label (we could also add a vertical margin here if we want) 
CGRect textFieldFrame = textField.frame; 
textFieldFrame.origin.y = labelFrame.origin.y + labelFrame.size.height; 
textField.frame = textFieldFrame; 

這只是確保文本字段總是低於標籤。根據您所使用的限制條件,您可能需要添加更多代碼才能確保UI正確佈局。

你還需要確保[containverView setNeedsLayout]被調用標籤文本發生變化時。

+0

你能更具體或舉一些例子嗎? – Datenshi

+0

非常感謝您的幫助。文本在動態視圖中不會更改,僅在再次加載視圖後纔會更改。我試圖更清楚地理解你想說的,但只是更多的問題。如果我理解正確,我需要用我的標籤做另一個.xib?或者我需要創建另一個類並獲取iboutlets並更改它們的初始化?我不能沒有子視圖做這個嗎?我知道我必須在標籤和文本框,只有在初始化我需要他們獲得通過標籤上的行建 – Datenshi

+0

你,如果你想避免創建UIView的子類可以只添加代碼到視圖控制器的初始化,如果你知道控制器加載後佈局不會改變。 –

0

如果您正在使用筆尖或storybord你可以刪除標記的文件檢查 enter image description here

+0

@Datenshi幫助你? – Sosily