UITableView 自定义部分标题出现在单元格下方

Posted

技术标签:

【中文标题】UITableView 自定义部分标题出现在单元格下方【英文标题】:UITableView custom section header appears below the cells 【发布时间】:2010-12-04 18:03:14 【问题描述】:

我的 UITableView 中有一个自定义部分标题,但我无法弄清楚为什么它们出现在表格的 UITableViewCell 下方。看截图:

这是创建节标题的代码:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
    NSString *sectionTitle = [self tableView:tableView titleForHeaderInSection:section];
    if (sectionTitle == nil) 
        return nil;
    

    return [LojaInfoHeaderView lojaInfoHeaderForSection:section withTitle:sectionTitle opened:[self sectionIsOpen:section] andDelegate:self];

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
    return [LojaInfoHeaderView viewHeight];

当用户触摸节标题时,节的单元格被插入或删除:

- (void)lojaInfoHeader:(LojaInfoHeaderView *)lojaInfoHeader sectionDidOpen:(NSInteger)section 
    NSArray *indexPathsToInsert = [self indexPathsForSection:section];
    [self setSection:section open:YES];
    [_tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationTop];


- (void)lojaInfoHeader:(LojaInfoHeaderView *)lojaInfoHeader sectionDidClose:(NSInteger)section 
    NSArray *indexPathsToDelete = [self indexPathsForSection:section];
    [self setSection:section open:NO];
    [_tableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:UITableViewRowAnimationTop];    

如何使部分标题显示在单元格上方?如何解决?

更新以显示事物的创建方式

这些是我正在使用的类方法:

+ (CGFloat)viewHeight 
    return 44.0;


+ (LojaInfoHeaderView *)lojaInfoHeaderForSection:(NSInteger)section withTitle:(NSString *)title opened:(BOOL)isOpen andDelegate:(id<LojaInfoHeaderDelegate>)delegate 
    LojaInfoHeaderView *newHeader = [[[LojaInfoHeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
    newHeader.section = section;
    [newHeader setTitle:title];
    newHeader.delegate = delegate;
    [newHeader setOpen:isOpen animated:NO];
    return newHeader;

【问题讨论】:

您确定[LojaInfoHeaderView viewHeight] 实际上返回了正确的高度而不是返回 0? 是的,实现是 + (CGFloat)viewHeight return 44.0; // 44 是正确的高度。 离题:你是如何让导航栏和工具栏以及所有的栏按钮变成可爱的紫色的?你在 ios 4.x 下运行吗?谢谢。 (不确定获得回复的最佳方式 - 没有直接向您发布问题。) 这是导航栏的色调 谢谢。这会覆盖“完成”按钮和其他获得“特殊”水蓝色的按钮吗? 【参考方案1】:

我发现了问题。我正在使用 alpha 设置 backgroundColor(是的,我不敢相信我错过了这个)。

initWithFrame 中的代码错误:

self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.1];

正确代码:

self.backgroundColor = [UIColor colorWithRed:0.89 green:0.89 blue:0.89 alpha:1.0];

【讨论】:

好吧,这个可能很难猜到 :)【参考方案2】:

尝试将整个表格样式更改为分组而不是普通样式。或者将剖面视图更改为不透明。无论设计要求是什么。

【讨论】:

在 initWithFrame 中设置 self.opaque = YES 没有解决。至于使用分组样式,我不明白为什么这是一个解决方案,因为设计很重要,而且它使节标题不粘,这不是我需要的。 你可以尝试将其设置为表头视图,而不是节头视图,可能会解决它。 可能是,但我有不止一个部分,在屏幕截图中我只显示一个。但是这个问题发生在所有部分。 我看到你的函数是类函数,而不是类的实例,你能发布更多关于如何创建节标题的代码吗?这将有助于更好地理解创建过程 谢谢,现在我明白为什么 self.opaque = YES 不起作用了。因为您只能在类的实例中使用 self,而不能在类函数本身中使用。尝试在您在 viewForHeaderInSection 函数中创建的 LojaInfoHeaderView 类的实例上调用 .opaque = YES,即在您的部分标题类上添加一个指针,例如 LojaInfoHeaderView *header = [LojaInfoHeaderView lojaInfoHeaderForSection...]; header.opaque = YES;返回标头;看看这是否有帮助。

以上是关于UITableView 自定义部分标题出现在单元格下方的主要内容,如果未能解决你的问题,请参考以下文章

从多节 UITableView 中的自定义静态单元格中检索标签文本

具有自定义单元格和多节数组数据的 Swift UITableView

可扩展 UiTableView 的自定义单元格

为 UITableView 中的所有单元格显示自定义按钮

自定义 UITableview 单元格可访问性无法正常工作

在 UITableView 中自定义每个单元格的分隔符