iPhone:如何根据UILabel的内容高度更改行高

时间:2011-08-18 16:31:24

标签: iphone ios

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

难点是UILabel需要通过检查其字符串内容来获得其高度

两个问题:

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

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

这里有一些代码,我确信我做错了..

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];

3 个答案:

答案 0 :(得分:3)

- (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 +标签的高度

答案 1 :(得分:1)

您可以使用单独的textForRow:函数来设置标签的文本,还可以在委托方法中计算标签(和单元格)的大小(就像您拥有的一样)已经完成了)

答案 2 :(得分:1)

(我评论的混搭)

  

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

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

  

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

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