2010-03-02 77 views
9

我有一些非常简单的代码返回标题节标题:的UITableView titleForHeaderInSection无法正确显示

- (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版的问题,但它可能在那时开始发生,但无论如何它必须以某种方式与代码相关。谢谢。

回答

5

我已经想出办法:用代码返航@""实际问题。如果返回空白字符串而不是零,则会导致页眉和页脚显示出现问题。

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

1

我复制&把你的代码放到我的一个项目中,它的工作完美无瑕。 (sdk 3.2.1)

也许错误是在另一部分? 正在创建自己的表格单元?如果是这样,你是否从“tableView:heightForRowAtIndexPath:”返回apropiate高度? (这个问题打了我一次)

1

当设置节标题标题时,我使用一个空的NSString获得更好的成功设置为相应的节,然后在完成时释放该字符串;以及限制我使用嵌套的If()Else()语句。

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

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

您还可以将字符串初始化为“默认”值,例如, NSString *sectionHeader = @"Default Header Title";。如果If()语句的非满足,则分配的默认标题值将在整个函数中保持不变,并因此返回为标题的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; 

}