文本更改后UILabel无法正确包装

时间:2013-06-24 23:46:34

标签: iphone ios uilabel

我通过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时,文本换行就会变得完全混乱。在某些情况下,文本将覆盖距离的一半以上,而不是几乎到达UILabel的末端,在某些情况下它根本不会包裹。

IB中的布局图:

Label in IB

模拟器中生成的标签的图像:

Image of resulting label in simulator

在第一个标签中它似乎工作正常,第二个标签根本没有包装。

在更改UILabel文本时,我还需要做些什么来保持文本换行?我还缺少什么?

注意 :更新了问题以包含更多详细信息和图片。

由于

2 个答案:

答案 0 :(得分:2)

问题是你正在使用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;

答案 1 :(得分:0)

你不应该做任何特别的事情。当您更改文本时,它会自动换行文本。否则文本将用尽文本标签边界(这不是你想要的)。您的问题是sizeToFit会永久更改标签的框架。它使得它尽可能小,同时仍然显示文本。您正在将其框架调整为原始文本,然后您正在更改文本,使其不再正确调整大小。您应该将帧重置为原始帧,更改文本,最后再调用大小以适应。

在viewDidLoad中:

self.originalFrame =  self.mainLabelSub1.frame;

然后在viewWillAppear:

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

注意: 查看文本标签边框以了解包装潜力的好方法是将标签的背景临时设置为突出的magentaColor。