我有一些非常简单的代码来返回节标题的标题:
- (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问题,但它可能已经开始发生在那时,但无论如何它必须以某种方式与代码相关。谢谢。
答案 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;
}