UITableView决定单个行高

时间:2013-08-01 08:49:48

标签: ios uitableview model-view-controller uikit

我有一个带有自定义标题部分和单元格的tableview。我已经创建了我的模型,现在模型保留了对截面视图标题的引用,这是“糟糕”的设计,但实际上我只是跟随来自apple的示例代码。好吧,我的单元格有一个标签,它会保存多行数据,所以它应该调整大小,以便每行都可见。我猜那将是控制器工作,对于heightForRowAtIndexPath对吗?事实上,从那里取回细胞并从那里获得高度并不困难。但是,这还不可能,因为尚未创建单元格。 (如果我错了,请纠正我)

我能想到这个工作的唯一方法就是在模型中引用单元格,是的,我知道,不好的公民。但通过这种方式,我可以很容易地达到我需要的高度。

另一种方法是创建一个用sizeWithAttributes:来计算高度的方法,但这看起来似乎是糟糕的设计,因为我不应该知道我的视图外观。

我在这里监督一些基本的东西吗?或者只是它的方式。

我没有附上任何代码因为,我不知道你想要什么,但随意请我插入一些东西。

2 个答案:

答案 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的正确高度。