UITableview的titleForHeaderInSection无法正确显示

9

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

- (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个回答

5
我已经弄清楚了:代码的实际问题是返回@""。如果您只返回一个空字符串,而不是nil,它会导致标题和页脚的显示问题。
相反,您需要返回一个nil字符串来正确显示所有标题和页脚。返回一个空格@" "仍将留下标题的垂直间距,因此这不是一种可行的选择。我已将所有return @"";实例更改为简单地return nil;

1

在设置节标题时,我更喜欢使用一个空的NSString来设置相应的节,然后在完成后释放该字符串;同时限制我的嵌套If()Else()语句的使用。

我尽量保持简单和清晰。当然,对于那些有超过3个部分的表格,我会使用“Switch”语句代替If()语句。

这个函数的好处是它会被调用多次(与你拥有的节数相同),并且每次都会运行代码。 NSString *sectionHeader=nil;给编译器一个要返回的值,无论嵌入在If()语句中的内容是什么。否则,您会收到警告,因为编译器不会在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;

}

1

我将你的代码复制粘贴到我的一个项目中,它完美地运行了。(sdk 3.2.1)

也许错误在其他地方? 你是否正在创建自己的表格单元?如果是这样,你是否从“tableView:heightForRowAtIndexPath:”返回了适当的高度? (我曾经遇到过这个问题)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接