0

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

假设我有label1and label2。它们的y位置在设置之前是相同的label.text

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

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

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

但是,我想要的是:

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

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

我的代码:

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

5 回答 5

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;
于 2013-05-15T09:47:36.400 回答
1

我不知道为什么人们反对我的问题。无论如何,我得到了一个理想的解决方案,我希望我可以帮助有同样问题的人。

为了防止表格视图单元格中的标签向上伸展,您必须Top Space to对情节提要上的标签进行约束:

在此处输入图像描述

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

进行约束后,标签将不再伸展。

于 2013-05-16T04:25:38.060 回答
0

为此,您必须根据文本专门设置框架,以便标签显示

CGSize maximumLabelSize = CGSizeMake(Width,VeryLargeHeight);

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

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

于 2013-05-15T09:39:22.173 回答
0

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

于 2013-05-15T09:40:41.167 回答
0

之前发布的每个答案都可以通过一些补充来解决您的问题。将文本放入 UITableViewCell(自定义或非自定义)中很重要。如果您返回的值tableView:heightForRowAtIndexPath:大于标签高度,则代码将起作用,否则,标签将错误显示。

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

于 2013-05-15T11:18:38.090 回答