【问题标题】:iOS - let UILabel stretch to downside when there are multiple linesiOS - 当有多行时让 UILabel 向下拉伸
【发布时间】:2013-05-16 12:25:38
【问题描述】:

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

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

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

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

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

但是,我想要的是:

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

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

我的代码:

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

【问题讨论】:

  • 我已经更新了。不过我觉得没关系。它就像每个动态调整 UILabel 大小的示例代码一样简单。

标签: ios uilabel


【解决方案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;

【讨论】:

  • 这听起来合乎逻辑,但它不起作用。我的标签在 tableView 单元格中,这有关系吗?
  • 所以,您可以轻松设置自定义单元格的标签框架...查看我编辑的答案...
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    CGSize maximumLabelSize = CGSizeMake(Width,VeryLargeHeight);
    
    CGSize expectedLabelSize = [string sizeWithFont:label.font                        
                                  constrainedToSize:maximumLabelSize 
                                      lineBreakMode:label.lineBreakMode];
    

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

    【讨论】:

    • 这听起来合乎逻辑,但它不起作用。我的标签在 tableView 单元格中,这有关系吗?
    • 是的,当然重要的是你必须调整 tableview 的高度才能正确查看它
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多