计算固定行数和表高度的行高

时间:2013-12-17 14:09:46

标签: ios objective-c uitableview

我有一个UIViewController,其上有3 UITableView个垂直排列。我不希望任何表格滚动。两个表(AB)的高度是根据其内容计算的 - 第三个(C)将重新调整大小以适应屏幕上剩余的任何空间。对于C,我将知道需要显示多少行,并且我想计算正确的heightForRowAtIndexPath以使所有单元格合适。

现在,我正在尝试

  • 占据整个屏幕的高度
  • 减去A
  • 的总高度
  • 减去B
  • 的总高度
  • 减去一些固定的空格
  • 减去C标题
  • 的大小
  • 减去C页脚的大小
  • 除以C
  • 中的单元格数

从我的数据来看,这应该是C中每个单元格需要的高度。 这是对的吗?有什么我想念的吗?这是我正在使用的代码:

- (CGFloat) tableView:(UITableView *) heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (tableView = self.tableC)
    {

        // self.lcA & self.lcB are NSLayoutContraints that I'm setting after I calculate how tall those tables need to be
        // buffer is some white space padding I add to keep the tables from touching - it will be hardcoded to some constant before this code runs

        CGFloat target = (self.view.bounds.size.height - self.lcA.constant - self.lcB.constant - [self tableView:tableView heightForHeaderInSection:indexPath.section] - [self tableView:tableView heightForFooterInSection:indexPath.section] - buffer) / [self tableView:tableView numberOfRowsInSection:indexPath.section];

    }

}

然而,当我运行它时,它会崩溃,说-[MyViewController tableView:heightForHeaderInSection:]: unrecognized selector sent to instance

我没有在此特定视图控制器上显式实现heightForHeaderInSection,但控制器在<UITableViewDataSource,UITableViewDelegate,...>文件中设置为MyViewController.h我是否需要实施heightForHeaderInSection才能使用此代码?如果是这样,有没有办法可以实现它,只是强制它返回一些默认值(类似return [super heightForHeader];)?如果没有,为什么我会收到此错误?

3 个答案:

答案 0 :(得分:1)

而不是做“ - [table tableView:tableView heightForFooterInSection:indexPath.section]”和所有这些东西,我认为你可以通过这个访问标题高度:

self.tableA.sectionHeaderHeight

页脚:

self.tableA.sectionFooterHeight

你也有:

self.tableA.tableHeaderView
self.tableA.tableFooterView

您可以在Apple文档中更好地了解所有这些内容:TableView Doc

答案 1 :(得分:1)

headerViewForSection是UITableView的方法,所以你不需要在你的控制器中调用它,而是在tableView中调用它。 您也可以在控制器中实现它,以返回使用UITableViewAutomaticDimension作为返回值所需的默认值。这个常量将从iOS 5开始工作

答案 2 :(得分:0)

我从来没有直接尝试过,但这可能会给你一个方向。 UITableView来自UIScrollView。因此,您可以使用UIScrollView的所有属性,例如scrollEnabled阻止滚动和contentSize