我尝试设置tableView。我在所有部分的行中使用标准单元格,除了最后一部分(包含一行)。因此,除了特殊的部分之外,我还想对所有这些部分使用标准布局。
以下是一个简短的例子,我的“特殊”单元格在第3部分(只有一行):
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if (section == 3)
return 5;
return **????**;
}
在 ??? 我想返回从UITableView计算的宽度(就像我没有实现该方法一样)。
[超级自我:tableView heightForHeaderInSection:(NSInteger的)部];
不起作用。我知道我可以访问
[tableView setionHeaderHeight]
默认为10,显然没有考虑到我有其他部分的章节标题,这将需要额外的空间。我试过了,但它会让这些部分过于接近(见截图):
(注意:我感兴趣的部分是一个看起来不像单元格的部分:带有日期的部分(不可见的背景))。
因此,最简单的方法是将布局移交给完美的标准实现 - 除了section3。
我有什么选择?
答案 0 :(得分:6)
以防万一:iOS 5中引入了一个名为UITableViewAutomaticDimension
的新常量。正如文档所述,当您希望UITableView
使用默认值时,您应该从委托方法返回它。
因此,您案例的代码将是:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if (section == 3) {
return 5;
} else {
return UITableViewAutomaticDimension;
}
}
答案 1 :(得分:3)
您似乎对heightForHeaderInSection
感到有点困惑 - 它返回表格部分标题的高度(这是表格部分的“标题”),而不是一行。 iOS调用此方法只询问单个节标题的高度,而不管其他任何节标题是什么。
如果您想使用默认设置,只需为[tableView sectionHeaderHeight]
以外的任何部分返回3
- 您不需要“考虑[您]有其他部分标题”,如它只要求section
的标题高度。它将再次询问其他人的高度(并自动计算行和其他部分的相对位置)。
答案 2 :(得分:1)
您没有超级实现tableView:heightForHeaderInSection:
,因为您没有为UITableViewDelegate
创建任何抽象基础实现的子类。相反,如果应该通过检查委托实现来查看方法是否可用,则决定是否应使用默认高度。
这是一个非常庞大的概念,尤其是来自Java或C#。 Objective-C协议中的方法可以是可选的,它们的缺失意味着使用默认。
您的方法应该实现为:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
if (section == 3) {
return 5;
} else {
return 36;
}
}
分组和普通表视图的默认高度不同(普通的22个点)。 UITableView
不会公开默认值,即使是私有方法也不会公开。 http://bugreport.apple.com处的文件错误,使其成为公共常量。
答案 3 :(得分:0)
在覆盖heightForHeaderInSection
并进行并排比较后,第一行标题的高度大于其余标题。这不是像素完美,但它非常接近:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0 ) {
return 46.0;
} else if (section == myCustomRow) {
return 12345.0; // custom height
} else {
return 36.0;
}
}