iOS - 当有多行时,让UILabel向下延伸

时间:2013-05-15 09:28:19

标签: ios uilabel

我正在使用setNumberOfLinessizeToFit动态调整tableView单元格中的标签大小。当有超过2行时,我的标签会向上延伸,但我想让它向下延伸。

假设我有label1label2。在设置y之前,他们的label.text位置是相同的:

label1         label2
---------     --------- 
|       |     |       |
---------     ---------

label1只有一行,而label2在分别设置label.text后有两行。它现在看起来像这样:

label1         label2
              --------- 
---------     | line1 |
| line1 |     | line2 |
---------     ---------

然而,我想要的是:

label1         label2                  
---------     ---------
| line1 |     | line1 |
---------     | line2 |
              ---------

我相信有一种简单的方法可以实现我的目标,但我无法通过Google搜索我能想到的关键字来找到它。

我的代码:

myLabel.text = value;
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];

5 个答案:

答案 0 :(得分:1)

试试这个:

NSString *text1 = @"Your text for label2";
CGSize constraint1 = CGSizeMake(125, 2000);   //width of your label....
CGSize size1 = [text1 sizeWithFont:[UIFont fontWithName:@"ArialMT" size:12.0] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];  //font of your label

cell.myLabel.frame = CGRectMake(posx,posy,125,size1.height); 
//posy is same as for label1
cell.myLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.myLabel.numberOfLines = 0;
cell.myLabel.text = text1;

答案 1 :(得分:1)

我不知道为什么人们会投票我的问题。无论如何,我有一个理想的解决方案,我希望我可以帮助那些有同样问题的人。

要防止表格视图单元格中的标签向上拉伸,您必须为故事板上的标签设置Top Space to约束:

enter image description here

您可以通过将标签拖动到单元格顶部附近来实现,Xcode会自动生成它。您可以通过单击此图片右下角的按钮来修改约束的值。

制定约束后,标签将不再延伸。

答案 2 :(得分:0)

要实现这一点,您必须根据文本专门设置框架,以便标签显示

CGSize maximumLabelSize = CGSizeMake(Width,VeryLargeHeight);

CGSize expectedLabelSize = [string sizeWithFont:label.font                        
                              constrainedToSize:maximumLabelSize 
                                  lineBreakMode:label.lineBreakMode];

expectedLabelSize.height是要在框架中设置的标签高度,并将numberofLines设置为0

答案 3 :(得分:0)

sizeToFit会将文字内容移至框架的顶部。请参阅此answer中的图表 而是使用sizeWithFont:constrainedToSize:lineBreakMode: API获取文本的确切高度,然后将其设置为您的标签。

答案 4 :(得分:0)

之前发布的每个答案都可以用于一些新增的问题。将文本放入UITableViewCell(自定义或不自定义)非常重要。如果tableView:heightForRowAtIndexPath:返回的值大于标签高度,则代码将起作用,否则,标签将被错误显示。

因此,您必须从tableView:heightForRowAtIndexPath:返回正确的值才能根据需要显示内容,因此请计算要在tableView:heightForRowAtIndexPath:中显示的文字所需的高度(+ - 如果您有其他观点,则为其他值)。 此外,如果您使用autloayout检查单元格视图上的约束,如果没有检查单元格视图上的弹簧和支柱。