2

我想做的事:

UITableViewController方法heightForRowAtIndexPath我想推断行高的值而不是硬编码它

我之前在界面生成器的情节提要中设置了值。

错误的做法:

以下方法是错误的方法,因为它是在创建实际单元格之前调用的,因此它会循环:

// wrong approach
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //AppTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AppCel" forIndexPath:indexPath];
    //int height = cell.frame.size.height;
    // TODO: Make it more dynamic
    return 112;
}

我正在考虑的方法:

有没有办法加载单元格main.storyboard文档并推断高度值?还是有其他方法?

相关问题搜索:

我发现以下未回答的相关问题可以追溯到 2010 年。另一个问题没有多大用处,因为它从单元格内容而不是故事板文档中得出高度。

4

3 回答 3

3

您编写的方法实际上并非完全错误。有什么问题是使用dequeueReusableCellWithIdentifier:forIndexPath. 相反,您想使用更简单的版本dequeueReusableCellWithIdentifier,您可以使用它来提供可以配置、布局然后计算高度的原型单元。

如果使用纯 iOS8,所有这一切都是通过新的自动布局为您完成的。如果您也想支持 iOS7,那么您需要手动执行此操作。

以下链接说明了您需要使用的过程。我使用它,当您想要同时支持 iOS7 和 iOS8 时,它非常有用。

在 UITableView 中使用自动布局进行动态单元格布局和可变行高

您还必须注意是否在单元格中使用基于大小类的约束,因为您必须解决一个不太明显的问题才能使高度正确。请参阅不考虑尺寸等级的屏幕外 UITableViewCells(用于尺寸计算)?

于 2015-02-16T11:31:40.337 回答
0

是的你可以。

您可以使用autolayout约束并让自动布局为您进行计算。

查看此链接的 AppCoda 教程

于 2015-02-16T11:10:58.460 回答
0

如果您在 xib (CP_Cell.xib) 中有单元格,您可以这样做:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     return ((CP_Cell *) [[NSBundle mainBundle] loadNibNamed:@"CP_Cell" owner:self options:nil].lastObject).frame.size.height;
 }
于 2015-02-16T11:14:29.857 回答