具有动态高度单元的UITableview&填充页脚视图

时间:2017-05-14 22:27:00

标签: swift uitableview swift3

我正在尝试使用页脚视图创建一个UITableview,以填充UITableview的剩余空白区域。然而,问题是细胞的高度不同。

我知道,如果细胞都是静态高度,我可以简单地计算出有多少个细胞,并将其乘以静态高度。不幸的是,在这种情况下,这不起作用。

目前的解决方案:

适用于静态高度单元格。

不适用于动态高度单元格。

    private func adjustFooterHeight() {
        if data.count == 0 {
            footerView.frame.size.height = tableView.bounds.height
        }
        else {
            //I use data.count instead of (data.count - 1) as I have the extra hidden cell, as pictured in image 2.
            let bottomFrame = tableView.rectForRow(at: IndexPath(row: data.count, section: 0))
            let height = tableView.bounds.height - (bottomFrame.origin.y + bottomFrame.height - rowHeight)
            footerView.frame.size.height = height < 0 ? 0 : height
            tableView.reloadData()
        }
    }

意图图:

enter image description here

1 个答案:

答案 0 :(得分:2)

所以我想出来了......

这是解决方案。

    private func adjustFooterHeight() {

        //Get content height & calculate new footer height.
        let cells = self.tableView.visibleCells
        var height: CGFloat = 0
        for i in 0..<cells.count {
             height += cells[i].frame.height
        }
        height = self.tableView.bounds.height - ceil(height)

        //If the footer's new height is negative, we make it 0, since we don't need footer anymore.
        height = height > 0 ? height : 0

        //Create the footer
        let footerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: height))
        self.tableView.tableFooterView = footerView
    }