第一个 tableview headerview 在滚动后消失,但其他每个都保持可见

first tableview headerview disappears after scroll but every other one stays visible

所以我的目标是让我的第一个 tableview headerview 在向下滚动后保持可见。所以我有一个带有 inset grouped 样式的表格视图,以便 header 与单元格一起移动,当视图加载时,第一个 header 标签是可见的,如下所示:

太棒了。我喜欢它。现在的问题是,当我开始在表格视图中向下滚动时,单元格从视图中消失,当我向上滚动时,单元格 header 消失了:

奇怪的是,有三个单元格部分,最后一个部分在视图加载时不在视图中,需要用户向下滚动,但是当我向下滚动到它时,向上滚动到哪里它不可见,再次向下滚动,header 视图仍然存在,我不明白。为什么第一部分 header 与最后一部分 header 的行为不同?

这是我的 headers 配置代码:

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    
    if section == 0 {
        return "Account Settings"
    } else if section == 3 {
        return "Support & Info"
    } else if section == 6 {
        return "Notification Settings"
    } else {
        return "label"
    }
    
}

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
    let header: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
    
    
    if section == 0 || section == 3 || section == 6 {
        header.textLabel?.font = UIFont(name: Constants.AppFonts.menuTitleFont, size: 14.0)
    } else {
        header.textLabel?.alpha = 0
    }
    
    header.textLabel?.textAlignment = NSTextAlignment.left
    header.backgroundConfiguration = .clear()
    
    
}

有什么建议吗?

Headers 被重用。 当你在 if 中做某事时,你需要在 else 中“重置值”。 嗯,在你的情况下,你是在 else (.alpha = 0) 中做的,但你明白了这个想法。

所以:

if section == 0 || section == 3 || section == 6 {
    header.textLabel?.font = UIFont(name: Constants.AppFonts.menuTitleFont, size: 14.0)
} else {
    header.textLabel?.alpha = 0
}

应该是:

if section == 0 || section == 3 || section == 6 {
    header.textLabel?.font = UIFont(name: Constants.AppFonts.menuTitleFont, size: 14.0)
    header.textLabel?.alpha = 1
} else {
    header.textLabel?.alpha = 0
}