我有一个带有自定义标题部分和单元格的tableview。我已经创建了我的模型,现在模型保留了对截面视图标题的引用,这是“糟糕”的设计,但实际上我只是跟随来自apple的示例代码。好吧,我的单元格有一个标签,它会保存多行数据,所以它应该调整大小,以便每行都可见。我猜那将是控制器工作,对于heightForRowAtIndexPath对吗?事实上,从那里取回细胞并从那里获得高度并不困难。但是,这还不可能,因为尚未创建单元格。 (如果我错了,请纠正我)
我能想到这个工作的唯一方法就是在模型中引用单元格,是的,我知道,不好的公民。但通过这种方式,我可以很容易地达到我需要的高度。
另一种方法是创建一个用sizeWithAttributes:来计算高度的方法,但这看起来似乎是糟糕的设计,因为我不应该知道我的视图外观。
我在这里监督一些基本的东西吗?或者只是它的方式。
我没有附上任何代码因为,我不知道你想要什么,但随意请我插入一些东西。
答案 0 :(得分:3)
您无需调用cellForRowAtIndexPath来获取指定的结果。 我相信您使用数组或字典数组来保存内容,
让数组为
NSArray *arrData = [[NSArray alloc]init];
现在,在
**heightForRowAtIndexPath**
{
if ( [[arrData objectAtIndex:indexPath.row].length] < 30 )
return 40; // Initial height
else if ( [[arrData objectAtIndex:indexPath.row].length] > 30 )
return 60; // Or any other value as per your need
}
这会调整单元格的高度,具体取决于单元格内部字符串的长度。 并且,在 cellForRowAtIndexPath 中 使用
[cell.lblText setFrame:CGRectMake(0,0,cell.frame.size.width, cell.frame.size.height)];
//如果你想让它变得更有活力
heightForRowAtIndex 写{
int _iCount = [[self.arrData objectAtIndex:indexPath.row].length] % 40;
if ( _iCount == 0 )
return 40;
else
return 40*_iCount;
}
这可以解决它。
答案 1 :(得分:0)
我认为在调用heightForRowAtIndexPath时已经创建了单元格。因此,在该方法中,您可以获取单元格,计算标签的高度并返回tableviewCell的正确高度。