UITableview titleForHeaderInSection无法正确显示

时间:2010-03-02 04:16:49

标签: iphone objective-c cocoa-touch uitableview

我有一些非常简单的代码来返回节标题的标题:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if (section==0) {
        return @"";
    } else if (section==1) {
        return @"Actions";
    } else if (section==2) {
        return @"Attached To";
    }

    return @"";
}

出于某种原因,当标题实际显示在模拟器上时,有一半时间它们只是第一个字母,然后是省略号。向上和向下滚动(最有可能刷新标题视图)将导致标题正确显示大约一半的时间并且在另一半时间显示不正确。

有谁知道可能导致这种情况的原因是什么?我认为这更像是最近的一个开发,但它似乎发生在我的应用程序中的几乎所有UITableView中。我不想说这是一个3.2问题,但它可能已经开始发生在那时,但无论如何它必须以某种方式与代码相关。谢谢。

3 个答案:

答案 0 :(得分:5)

我已经弄明白了:代码的实际问题是返回@""。如果只返回一个空白字符串而不是nil,则会导致页眉和页脚显示出现问题。

您需要返回一个nil字符串以使所有页眉和页脚正确显示。返回空格@" "仍会留下标题的垂直空间,因此这不是一个可行的选项。我已将return @"";的所有实例更改为return nil;

答案 1 :(得分:1)

我将您的代码复制并复制到我的一个项目中,它完美无瑕。 (sdk 3.2.1)

也许错误在另一部分? 正在创建自己的tablecells?如果是这样,你是否从“tableView:heightForRowAtIndexPath:”返回apropiate高度? (这个问题确实让我受伤了一次)

答案 2 :(得分:1)

设置Section Header Titles时,我在使用设置为相应Section的空NSString方面取得了更大的成功,然后在完成后释放该字符串;以及限制我使用嵌套的If()Else()语句。

我尽量保持简洁。当然,对于那些我有3个以上部分的表,我使用“Switch”语句代替If()语句。

关于这个函数的好处是它可以被调用多次 - (部分的数量),并且每次都会运行代码。无论If()语句中嵌入了什么,NSString *sectionHeader=nil;都会为编译器提供一个返回值。否则,您会收到警告,因为编译器不会在If()语句中搜索返回值。

您还可以将字符串初始化为“默认”值,例如NSString *sectionHeader = @"Default Header Title";。如果满足if()语句的非,则分配的默认头值将在整个函数中保持相同,因此作为Title的sectionHeader返回。

以下基本结构:

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

//TEMP SECTION STRING HOLDER:
NSString *sectionHeader = nil;


//SET TITLE FOR EACH SECTION:
if(section == 0) {
    sectionHeader = @"Section Header No. 1";
}

if(section == 1) {
    sectionHeader = @"Section Header No. 2";
}

if(section == 2) {
    sectionHeader = @"Section Header No. 3";
}


//RETURN THE SECTION HEADER FOR EACH SECTION:
return sectionHeader;

}