簡體   English   中英

更改文字后,UILabel無法正確換行

[英]UILabel not wrapping correctly after text change

我正在通過IB工作,並且有一個UILabel幾乎延伸到布局的末尾。 我將其設置為Lines = 2,因為它應該最多容納2條線。但是,如果只有1行,我希望它具有頂部的垂直對齊方式。

IB中的標簽設置:

 Lines:2
 Line breaks: Word wrap

在代碼中,在viewDidLoad方法中,我設置了UILabel的文本。 但是,作為功能的一部分,文本必須更改。 這是我的代碼:

[_main_lbl1 setText:[myUI MAIN_TITLE]];  //Always only 1 line
[_main_lblsub1 setText:[myUI SUB_TITLE]]; //May be 1 or 2 lines
[_main_lblsub1 sizeToFit];  //Causes vertical alignment (I believe)

每當我更改文本並重新運行sizeToFit時,文本換行都會變得完全混亂。 在某些情況下,文本不會環繞到IB中設置的UILabel的盡頭,而是會包裹到略大於一半的距離,而在某些情況下則不會包裹。

IB中的布局圖:

IB中的標簽

模擬器中結果標簽的圖像:

模擬器中結果標簽的圖像

在第一個標簽中似乎工作正常,第二個標簽根本沒有包裝。

更改UILabel文本時,我需要做些什么來保持文本換行? 我還有什么想念的嗎?

注意 :已更新問題,以包含更多詳細信息和圖片。

謝謝

問題是您正在使用sizeToFit。 這會拉長標簽以適合文本。 如果需要更改大小,可以使用:

CGSize maxSize = CGSizeMake(320, 9999);  // 999 means it can be as tall as you like

CGSize textSize = [label.text sizeWithFont:label.font
                         constrainedToSize:maxSize];
label.size = textSize;

您不必做任何特別的事情。 更改文本時,它將自動換行以適合文本。 否則,文本將超出文本標簽的范圍(這不是您想要的)。 您的問題是sizeToFit會永久更改標簽的框架。 在顯示文本的同時,使其盡可能小。 您需要將其框架調整為原始文本的大小,然后再更改文本,使其不再正確調整大小。 您應該將框架重置為原始框架,更改文本,最后調用大小以再次適合。

在viewDidLoad中:

self.originalFrame =  self.mainLabelSub1.frame;

然后在viewWillAppear中:

self.mainLabel1.frame = self.originalFrame;
self.mainLabel1.text = @"New Text";

注意:查看文本標簽邊框以了解包裝可能性的一種好方法是將標簽的背景臨時設置為像magentaColor這樣突出的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM