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 内容高度更改行高的主要内容,如果未能解决你的问题,请参考以下文章
根据 Swift 中的 UILabel 文本调整 UIView 高度
根据 iOS SWIFT 高度更高的 UIImageView 或 UILabel 设置 UITableViewCell 高度