2014-10-27 37 views
2

所以我有一個UILabel從數據庫中獲取動態數量的內容。 標籤獲得的內容越多,標籤獲得的高度就越高。如何製作動態高度UILabel將其他元素推出?

對於這個效果我已經使用這個代碼:

NSString *infoztext = [dataBase valueForKey:@"infos"]; 
    infoz.text = infoztext; 
    CGSize maxSize = CGSizeMake(320, 410); 
    CGRect labrect = [infoztext boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:infoz.font} context:Nil]; 
    infoz.numberOfLines = 0; 
    infoz.frame = CGRectMake(23, 594, 274, labrect.size.height); 

這就像一個魅力。標籤將根據其收到的內容數量調整其高度。

問題是我的標籤重疊視圖中的所有元素,而不是將它們推開。

我確實已啓用自動佈局但仍然沒有任何反應,但重疊。

如何獲得標籤以推送其他元素而不是重疊它們?

+1

要使自動佈局工作,您需要設置約束條件。你在任何地方設置任何限制嗎? (在Interface Builder或代碼中) – rfj001 2014-10-27 19:11:51

+0

我通常使用Interface Builder。我有我的所有元素,如標籤和UIImageView在一個視圖內的ScrollView內。在那裏我設置了限制。成爲最簡單的方式使ScrollView與自動佈局一起工作。 雖然測試我剛剛選擇了所有的元素,並設置「添加缺少的約束」,但這也沒有幫助我。 – Mariooo 2014-10-28 14:26:03

+0

如果我選擇我的動態標籤下的下一個元素並設置「添加缺少的約束」,結果是我的動態標籤只會調整它自己的高度,直到它到達它下面的元素,這意味着它不會與它重疊,但它也不會推它。它只會調整它自己的高度,直到它到達另一個元素,而不是限制它自己的內容。就像元素阻止標籤調整它自己的高度一樣。 – Mariooo 2014-10-28 14:33:05

回答

2

在界面構建器中,您可以選擇一個元素(在本例中爲UILabel正下方的元素)並在該標籤上設置約束。在界面右下角的界面生成器中,有4個圖標,選擇中間有正方形的圖標。您可以在正方形和頂部文本字段之間選擇略微的I形狀。選擇之後,單擊「添加約束」,即使在調整UILabel的大小後,您的應用也應該保持這兩個元素之間的間距不變。

注意:您還必須對UILabel下的所有元素執行此操作,否則您將在屏幕下方遇到同樣的問題。

編輯:底部的四個圖標是「對齊」,「Pin」,「解決自動佈局問題」和「調整行爲大小」。約束所需的圖標是「Pin」圖標。點擊它,紅色的我應該靠近彈出的小窗口的頂部。

+0

謝謝。您可能正在談論的四個圖標(從左到右)「對齊」,「Pin」,「解決自動佈局問題」和「調整行爲」。據我所知,中間沒有一個正方形,也沒有紅色。他們都是單色的。 – Mariooo 2014-10-28 14:17:45

+0

您正在尋找「Pin」圖標,點擊該圖標,您應該看到靠近窗口頂部的發紅色的形狀。 – 2014-10-28 17:03:39

+0

Thx Victor這讓我有了更多的進步。 讓我暑假如何做到這一點: 1)選擇一個像標籤一樣的元素 2)點擊「pin」 3)在新的彈出窗口中有一個正方形,它的四個方向都有4x文本框。有TINY紅色筆劃。您必須實際點擊它們才能激活相關文本字段中的值。如果您單擊文本框旁邊的下拉箭頭,則還可以選擇哪個其他元素恰好應該成爲測量點。 但讓我告訴你...我有20個元素下的動態標籤,這是* ss的痛苦,讓他們都工作:( – Mariooo 2014-10-29 14:44:15