我有一个UIViewController
,其上有3 UITableView
个垂直排列。我不希望任何表格滚动。两个表(A
和B
)的高度是根据其内容计算的 - 第三个(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];
)?如果没有,为什么我会收到此错误?
答案 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
。