1

我正在通过 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 文本时,我需要做些什么来保持文本换行吗?还有什么我想念的吗?

注意:更新的问题包括更多细节和图片。

谢谢

4

2 回答 2

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;
于 2013-06-25T01:19:37.517 回答
0

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

在 viewDidLoad 中:

self.originalFrame =  self.mainLabelSub1.frame;

然后在 viewWillAppear 中:

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

注意: 查看文本标签的边框以了解换行潜力的一个好方法是将标签的背景临时设置为突出的洋红色。

于 2013-06-25T05:56:44.150 回答