我想动态地将单元格的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];
答案 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:
使用它。