隐藏特定 TableView 部分的 TableViewHeaderView

Posted

技术标签:

【中文标题】隐藏特定 TableView 部分的 TableViewHeaderView【英文标题】:Hide TableViewHeaderView for a specific TableView section 【发布时间】:2013-07-28 20:59:13 【问题描述】:

所以我有这个包含几个部分的 Tableview,确切地说是 (3)。我希望第 2 节和第 3 节有标题,而不是第一节..

这是我所做的:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

    NSString *sectionName;

    UIView *tempView;
    tempView = [[UIView alloc]initWithFrame:CGRectMake(0,0,300,20)];
    tempView.backgroundColor=[UIColor grayColor];

    UILabel *tempLabel = [[UILabel alloc]initWithFrame:CGRectMake(10,0,300,20)];
    tempLabel.backgroundColor = [UIColor clearColor];
    tempLabel.shadowColor = [UIColor blackColor];
    tempLabel.shadowOffset = CGSizeMake(0,2);
    tempLabel.textColor = [UIColor whiteColor]; //here you can change the text color of header.
    tempLabel.font = [UIFont fontWithName:@"Helvetica" size:14.0f];


    switch (section)
    
            break;
        case 1:
        
            sectionName = NSLocalizedString(@"Information", @"Information");
            tempLabel.text = sectionName;
            [tempView addSubview:tempLabel];
        
            break;

        case 2:
        
            sectionName = NSLocalizedString(@"Tools", @"Tools");
            tempLabel.text = sectionName;
            [tempView addSubview:tempLabel];
        
            break;

    
    return tempView;

我对需要做什么感到困惑......这是正在发生的事情的图片:

【问题讨论】:

【参考方案1】:

在 section == 0 的情况下,您仍在将 tempView 设置为 UIView 的新实例并返回该值,您只是没有设置标签的标题。此外,正如您所了解的,您应该为第 0 部分的 tableView:heightForHeaderInSection: 返回 0。

【讨论】:

【参考方案2】:

所以当我写这个问题时,我得出了一个结论......但也许它不是更有效?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

    CGFloat headerheight = 20.0;

    switch (section)
    
        case 0:  headerheight = 0.0;  break;
        case 1:  headerheight = 20.0;  break;
        case 2:  headerheight = 20.0;  break;
    
    return headerheight;

如果有人对我如何不需要实现这个 tableview 委托方法有任何建议,请说出来。我觉得我只是不需要返回指定部分的视图而不是说部分标题为 0。但我目前不完全确定,问题已解决但可能没有正确解决?

这是解决方案结果的图片。

【讨论】:

是的,您还应该为 tableView:heightForHeaderInSection: 返回 0,但最好将 viewForHeaderInSection 修改为在该部分 == 0 的情况下返回 nil。在该方法的顶部。 您认为您可以为我实现 section == 0 案例吗?我像这样实现了 viewForHeaderInSection 方法, switch (section) case 0: tableView.tableHeaderView = nil; 休息;它没有工作:( 只需将其添加为该方法的第一行:if (section == 0) return nil;。如果你这样做,你就不需要case 0(而且,你不会有创建一个你最终会丢弃的标题视图的开销)。

以上是关于隐藏特定 TableView 部分的 TableViewHeaderView的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UITableView 的弹跳范围

隐藏第一个 TableView 部分标题高度 iOS 11

如何在tableView的indexPath隐藏分隔符?这意味着,删除特定的分隔符,而不是所有的分隔符[重复]

在 reloadSections 后 TableView 部分变为隐藏

Swift 中的 UITableView 无法识别 UINavigationBar,填充已关闭,部分 tableview 被隐藏

如何使节标题锚定到多节表格视图的顶部?