         
         return headerFooterHeightForSection(section, height: height)
     }
+
+    func isSectionEmpty(_ section: Int) -> Bool {
+        return tableView.dataSource?.tableView(tableView, numberOfRowsInSection: section) == 0
+    }
     
     override open func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
-        if tableView.dataSource?.tableView(tableView, numberOfRowsInSection: section) == 0 {
+        if isSectionEmpty(section) {
             return nil
         } else {
             return super.tableView(tableView, titleForHeaderInSection: section)

    
    open func update(cells: [UITableViewCell]) {
        cells.forEach { cell in
            let row = tableViewWrapper!.row(with: cell)
            row.update()
        }
    }
    
    open func set(cells: [UITableViewCell], hidden: Bool) {
        cells.forEach { (cell: UITableViewCell) in
            let row = tableViewWrapper!.row(with: cell)
            row.hiding = hidden
        }
    }
    
    open func set(cells: [UITableViewCell], height: CGFloat) {
        cells.forEach { (cell: UITableViewCell) in
            let row = tableViewWrapper!.row(with: cell)
            row.height = height
        }
    }
    

    }
    
    override open func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
        if isSectionEmpty(section) {
            return nil
        } else {
            return super.tableView(tableView, titleForFooterInSection: section)
