iPhone:如何通过 UILabel 内容高度更改行高

Posted

技术标签:

【中文标题】iPhone:如何通过 UILabel 内容高度更改行高【英文标题】:iPhone:How to change rowheight by UILabel's content height 【发布时间】:2011-08-18 16:31:23 【问题描述】:

我想动态地将单元格的行高设置为 UILabel 的高度(即单元格的子视图)。

难点在于UILabel需要通过检查其字符串内容来获取它的高度

两个问题:

1- 如何根据字符串长度正确设置 UILabel 中的行数?

2- 由于委托方法 heightForRowAtIndexPath 在 cellForRow 方法之前调用,我如何将此 UIlabel 高度反映到 row.height?

这里有一些代码,我确定我做错了什么..

Nsstring st= "very long text...";
CGSize theSize = [st sizeWithFont:font constrainedToSize:CGSizeMake(250.0f, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap];
CGRect cg = CGRectMake(0.0f, 0.0f, 250.0f, theSize.height); 
UILabel *label=[[UILabel alloc] initWithFrame:cg]; 
label.textAlignment=UITextAlignmentLeft;
label.text=st;
[label setNumberOfLines:10];// this is trouble!! how to set this!?
[cell addSubview:label];

【问题讨论】:

UILabel 的numberOfLines 是最大行数。 “要删除任何最大限​​制,并根据需要使用尽可能多的行,请将此属性的值设置为 0。” @albertamg 太棒了!当我设置为零时,我的大部分问题都解决了!现在如何将 row.height 设置为 theSize.height? tnx 您需要实现heightForRowAtIndexPath: 并返回行的适当高度。您可以将theSize 的计算移至辅助方法并从cellForRowAtIndexPath: 中使用它。 @albertamg tnx 如果你能回答这个问题,我会接受 @albertamg 我还应该将字符串内容发送到哪里?在初始化方法中?它应该在 heightForRowAtIndexPath 调用之前的某个地方 【参考方案1】:
- (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath 

CGSize labelSize = CGSizeMake(200.0, 20.0);
if ([string length] > 0)
labelSize = [string sizeWithFont: [UIFont boldSystemFontOfSize: 17.0] constrainedToSize: CGSizeMake(labelSize.width, 1000) lineBreakMode: UILineBreakModeWordWrap];
return 24.0 + labelSize.height;

您需要实现 heightForRowAtIndexPath。在我的示例代码中,我返回了 24 + 标签的高度

【讨论】:

【参考方案2】:

(我的 cmets 的混搭)

1- 如何根据字符串长度正确设置 UILabel 中的行数?

UILabel 的numberOfLines 是最大 行数。 “要删除任何最大限​​制,并根据需要使用尽可能多的行,请将此属性的值设置为 0。”

2- 由于委托方法 heightForRowAtIndexPath 在 cellForRow 方法之前调用,我如何将此 UIlabel 高度反映到 row.height?

您需要实现heightForRowAtIndexPath: 并为行返回适当的高度。您可以将theSize 的计算移至辅助方法,并从cellForRowAtIndexPath: 中使用它。

【讨论】:

【参考方案3】:

你可以有一个单独的textForRow: 函数,你可以使用它来设置标签的文本,也可以在委托方法中计算标签(和单元格)的大小(就像你已经做过的那样)

【讨论】:

以上是关于iPhone:如何通过 UILabel 内容高度更改行高的主要内容,如果未能解决你的问题,请参考以下文章

我想将自动布局应用于 UILabel,例如灵活的高度和宽度

如何使动态高度 UILabel 将其他元素推开?

根据 Swift 中的 UILabel 文本调整 UIView 高度

多行 UILabel 高度,横向自动布局更高

根据 iOS SWIFT 高度更高的 UIImageView 或 UILabel 设置 UITableViewCell 高度

如何使用 UILabel 的高度正确增加 UITableViewCell