Gap 创建了 UITableView,其中不应显示任何部分 header 或页脚

Gap created UITableView where no section header or footer should be shown

我在两个部分之间创建了一个间隙,我不知道如何摆脱它。

我有 4 个部分:

第 1、2 和 3 部分都有(相同类型)header,但第 4 部分没有。第 1、2 和 4 节有页脚,但第 3 节没有。

在加载应用时,第 3 节和第 4 节之间没有 header 和页脚。我试图通过以下代码来防止这种情况发生:

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerIdentifier = HomeViewSectionHeaderView.reuseIdentifier
        guard let view = tableView.dequeueReusableHeaderFooterView(
                withIdentifier: headerIdentifier)
                as? HomeViewSectionHeaderView
        else {
            return nil
        }
        if !sections[section].showSectionHeader {
            return nil
        }
        
        view.textLabel?.text = sections[section].title
        
        
        return view
    }
    
    
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        guard let view = tableView.dequeueReusableHeaderFooterView(
                withIdentifier: HomeViewSectionFooterView.reuseIdentifier)
                as? HomeViewSectionFooterView
        else {
            return nil
        }
        if !sections[section].showSectionFooter {
            return nil
        }
        
        return view
    }
    
    
    
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if (sections[section].showSectionHeader){
            return 50.0
        }
        return 0.0
    }
    
    func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
        if (sections[section].showSectionHeader){
            return 50.0
        }
        return 0.0
    }
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        if (sections[section].showSectionFooter){
            return 8.0
        }
        return 0.0
    }
    
    func tableView(_ tableView: UITableView, estimatedHeightForFooterInSection section: Int) -> CGFloat {
        if (sections[section].showSectionFooter){
            return 8.0
        }
        return 0.0
    }

在视图层次结构上我们可以清楚地看到它是一个没有任何元素的间隙:

全屏是这样的:

与其将 0 返回到 heightForFooterInSectionheightForHeaderInSection,不如尝试返回一个非零值(当然接近 0),例如 0.001.leastNormalMagnitude.leastNonzeroMagnitude

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        if (sections[section].showSectionFooter){
            return 8.0
        }
        return .leastNormalMagnitude //or you can use .leastNonzeroMagnitude or return a non zero value like 0.001
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if (sections[section].showSectionHeader){
            return 50.0
        }
        return .leastNormalMagnitude //or you can use .leastNonzeroMagnitude or return a non zero value like 0.001
}