Header & Footer Cells

Core

Section header and footer view base classes for UITableView. TTBaseUITableViewHeaderFooterView provides a padded panel container with TTBaseUIKit styling. Predefined subclasses cover common header patterns.

ClassPattern
TTBaseUITableViewHeaderFooterViewBase — empty panel, override and fill
LineTableHeaderFooterViewCellSeparator line only
SpaceTableHeaderViewCellEmpty space/gap between sections
TextLeftRightTableHeaderFooterViewCellLeft label + right label
TextSubTextTableHeaderFooterViewCellTitle above, subtitle below
TextTableHeaderFooterViewCellSingle centered/left label

🚀 Usage

// Register
tableView.register(TTBaseUITableViewHeaderFooterView.self,
                   forHeaderFooterViewReuseIdentifier: TTBaseUITableViewHeaderFooterView.reuseIdentifier)

// Dequeue in delegate
func tableView(_ tableView: UITableView,
               viewForHeaderInSection section: Int) -> UIView? {
    let header = tableView.dequeueReusableHeaderFooterView(
        withIdentifier: TTBaseUITableViewHeaderFooterView.reuseIdentifier
    ) as! TTBaseUITableViewHeaderFooterView
    return header
}

// Text header (most common)
tableView.register(TextTableHeaderFooterViewCell.self,
                   forHeaderFooterViewReuseIdentifier: TextTableHeaderFooterViewCell.reuseIdentifier)

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let header = tableView.dequeueReusableHeaderFooterView(
        withIdentifier: TextTableHeaderFooterViewCell.reuseIdentifier
    ) as! TextTableHeaderFooterViewCell
    header.titleLabel.setText(text: "Section \(section + 1)")
    return header
}

// Custom header subclass
class MonthHeaderView: TTBaseUITableViewHeaderFooterView {
    let monthLabel = TTBaseUILabel(withType: .TITLE, text: "", align: .left)

    override func updateUI() {
        panel.addSubview(monthLabel)
        monthLabel.setLeadingAnchor(constant: 16).setcenterYAnchor(constant: 0)
    }

    func configure(month: String) {
        monthLabel.setText(text: month)
    }
}

// Space header (gap between sections)
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return tableView.dequeueReusableHeaderFooterView(
        withIdentifier: SpaceTableHeaderViewCell.reuseIdentifier
    )
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 16
}
Pro Tip: Use SpaceTableHeaderViewCell with height ~16pt between sections for grouped-list visual separation without full InsetGroupedTableView which loses row customization. Pair with TTBaseShadowTableViewCell for a card-list look.