這是iPhone應用程序的一部分,但應適用於一般用objC編寫的可可。調整UILabel以適應Word Wrap
我有一個UILabel持有不同數量的文本(從單個字符到幾個句子)。文本應始終以最大可能的字體顯示,以適合UILabel中的所有文本。 最大行數設置爲4,換行符模式設置爲自動換行。
由於使用了多行,因此adjustsFontSizeToFitWidth不適用於調整文本大小。
因此我使用一個循環來確定每個字符串最大可能的字體大小,例如:
//Set the text self.textLabel.text = text; //Largest size used NSInteger fsize = 200; textLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:fsize]; //Calculate size of the rendered string with the current parameters float height = [text sizeWithFont:textLabel.font constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999) lineBreakMode:UILineBreakModeWordWrap].height; //Reduce font size by 5 while too large, break if no height (empty string) while (height > textLabel.bounds.size.height and height != 0) { fsize -= 5; textLabel.font = [UIFont fontWithName:@"Verdana-Bold" size:fsize]; height = [text sizeWithFont:textLabel.font constrainedToSize:CGSizeMake(textLabel.bounds.size.width,99999) lineBreakMode:UILineBreakModeWordWrap].height; };
這種方法適用於大部分。 例外是長詞。 讓我們看看字符串@「體驗富。」舉個例子。 單詞「experience」比其他單詞長得多,不會被正確包裝,而是將字符串分成4行。 我正在尋找一種方法進一步縮小尺寸,以便每個單詞適合一行。
實施例:
-old-
字體大小:60
The Exper ience foo
應該是
-NEW-
字體大小:30
The Experience foo
有可能是一個簡單的方法來做到這一點,但我打牆。
因爲'sizeWithFont:'已經成爲過時與iOS 7,你應該用'boundingRectWithSize:'替換它。 – AppsolutEinfach 2014-10-16 17:05:33