【问题标题】:UITableview titleForHeaderInSection not displaying correctlyUITableview titleForHeaderInSection 显示不正确
【发布时间】:2010-03-02 04:16:49
【问题描述】:

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

- (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 @"";
}

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

有人知道是什么原因造成的吗?我认为这更多是最近的发展,但它似乎发生在我的应用程序中的几乎所有UITableViews 中。我不想说这是一个 3.2 的问题,但它可能已经开始发生,但无论哪种方式,它都必须以某种方式与代码相关。谢谢。

【问题讨论】:

    标签: iphone objective-c cocoa-touch uitableview


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我将您的代码复制并粘贴到我的一个项目中,它运行良好。 (SDK 3.2.1)

      也许错误在另一部分? 正在创建自己的表格单元吗?如果是这样,您是否从“tableView:heightForRowAtIndexPath:”返回适当的高度? (这个问题确实困扰过我一次)

      【讨论】:

        【解决方案3】:

        在设置 Section Header Titles 时,我更成功地使用了一个空的 NSString,该 NSString 被设置为相应的 Section,然后在完成后释放该字符串;以及限制我使用嵌套的 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;
        
        }
        

        【讨论】:

          猜你喜欢
          • 2013-09-25
          • 2015-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多