访问UITableView的“默认”方法

时间:2011-01-11 16:44:39

标签: iphone ios uitableview

我尝试设置tableView。我在所有部分的行中使用标准单元格,除了最后一部分(包含一行)。因此,除了特殊的部分之外,我还想对所有这些部分使用标准布局。

以下是一个简短的例子,我的“特殊”单元格在第3部分(只有一行):

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    if (section == 3)
        return 5;
    return **????**;
}

??? 我想返回从UITableView计算的宽度(就像我没有实现该方法一样)。

  

[超级自我:tableView   heightForHeaderInSection:(NSInteger的)部];

不起作用。我知道我可以访问

[tableView setionHeaderHeight]

默认为10,显然没有考虑到我有其他部分的章节标题,这将需要额外的空间。我试过了,但它会让这些部分过于接近(见截图):

(注意:我感兴趣的部分是一个看起来不像单元格的部分:带有日期的部分(不可见的背景))。 alt text

因此,最简单的方法是将布局移交给完美的标准实现 - 除了section3。

我有什么选择?

4 个答案:

答案 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;
    }
}
相关问题