我有UITableView
(Grouped!),需要计算两种样式的单元格的高度:UITableViewCellStyleDefault
和UITableViewCellStyleValue2
。
我就是UITableViewCellStyleDefault
:
CGSize textSize = {300.f, 200000.0f};
CGSize size = [myTextString1 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 30.0f;
result = MAX(size.height, 44.0f);
适用于UITableViewCellStyleValue2
:
CGSize textSize = {207.f, 200000.0f};
CGSize size = [myTextString2 sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap];
size.height += 30.0f;
result = MAX(size.height, 44.0f);
我的问题是他们返回了不正确的高度,我认为textSize
我使用了错误的数字。对于长文本,底部部分被缩短(通常只是一条带有几个单词的行),对于两个CellStyles,它们在单元格中的文本上方和下方都有奇怪的间距。
对于UITableViewCellStyleValue2
我得到了宽度大小(207.0f
),使text.backgroundColor变为红色,然后只计算框的大小。 300.0f
的{{1}}宽度是UITableViewCellStyleDefault
单元格的大小。
有谁知道我需要使用哪些值来正确计算UITableViewStyleGrouped
的大小,从而为我的细胞获得合适的高度?
感谢
答案 0 :(得分:9)
这是我正在使用的代码。它就像一种细胞的魅力。它可能会为您的应用程序提供一些有用的部分。
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath {
AppAppDelegate *appDelegate = (AppAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString *Text = ([[appDelegate.myTextSectionsDelegateDict objectAtIndex:indexPath.section] objectForKey:@"Text"]);
UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
CGSize labelSize = [Text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
return labelSize.height + 15;}
答案 1 :(得分:2)
创建单元格时,您使用的字体与用于测量的字体相同吗?
我在this page使用了教程,一切都适合我。它也可能对你有用:
答案 2 :(得分:2)
看来你已经发现你使用了错误的文字大小。您可能希望仅使用标签的font
和lineBreakMode
属性来避免将来出现此问题,尤其是在以后更改单元格时。此外,为了便于阅读,我会避免在返回数字之前添加到高度。相反,我会尝试这样的事情:
CGSize textSize = CGSizeMake( 300.0, 1979 );
CGSize size = [ myTextString1 sizeWithFont:[[ cell textLabel ] font ]
constrainedToSize:textSize
lineBreakMode:[[ cell textLabel ] lineBreakMode ]];
result = MAX( size.height + 30, 44.0f );
我使用1979年,因为根据文档,不应该返回大于2009年的值。
答案 3 :(得分:2)
如果要为cellvalue2正确计算高度,您应该使用:
[UIFont boldSystemFontOfSize:15.0f]
和linebreakmode:NSLineBreakByTruncatingTail
如果您不使用粗体,文本将正确填充,但您将丢失正确的垂直填充。
你的其余计算是正确的。
答案 4 :(得分:0)
什么时候为我工作是根据表视图的宽度计算constraintSize:
CGSize constraintSize = CGSizeMake(tableView.frame.size.width * 0.6, 2009);
CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
答案 5 :(得分:0)
最简单的方法:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat result = 10.0f;
if(indexPath.section == 1) // here i compare the sections
{
result = 400.0f;
}
return result;
}
根据您拥有的部分返回值。这将为您提供自定义行高。