如何使uitableview的最后一行填充空白

Posted

技术标签:

【中文标题】如何使uitableview的最后一行填充空白【英文标题】:How to make last row of uitableview fill the empty space 【发布时间】:2016-04-08 13:46:58 【问题描述】:

我希望最后一个单元格/行 (mapView) 填充下面的空白区域。

我的 tableviewcontroller 代码

class CustomTableViewController: UITableViewController 

    let fakeArray = ["Row1","Row2","Row3"] // Array can contains more items

    override func viewDidLoad() 
        super.viewDidLoad()
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
    

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int 
        return 1
    

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return fakeArray.count+1
    

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

        if(indexPath.row != fakeArray.count)
            let cellIdentifier = "TestTableViewCell"
            let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! TestTableViewCell
            cell.rowName.text = fakeArray[indexPath.row]
            return cell
        else
            let cellIdentifier = "MapTableViewCell"
            let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MapTableViewCell
            return cell
        

    

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
        if(indexPath.row != fakeArray.count)
            return 44
        else
            return 80
        
    


有时我会在地图之前显示更多行。所以下面的空白区域可能会有所不同。当然,空白空间也会因 iPhone 屏幕尺寸而异。

【问题讨论】:

您可以增加最后一行的行高。 我会将地图放在表格视图的页脚视图中。 您会在地图前显示这么多行以致地图不可见吗?然后呢? @MikeTaverne 是的,我会的。理想情况下,我想要这个案例的标准高度。当我有空的空间时,我想调整单元格的高度来填充这个空间 【参考方案1】:

您需要弄清楚您有多少空白空间,然后将地图单元格的高度设置为该值。

首先,将 table view 的顶部和底部约束到 superview,以确保它占据整个屏幕。

您的表格视图的可见高度将是:

    self.tableView.bounds.size.height

在 heightForRowAtIndexPath 中,计算地图单元格上方的单元格高度,并返回与表格视图可见高度之间的差值:

    let otherCellsHeight: CGFloat = fakeArray.count * 44

    return self.tableView.bounds.size.height - otherCellsHeight

当然,为了安全起见,您还应该检查地图单元格的计算高度是否为负数或小于某个最小高度:

    let availableSpace = self.tableView.bounds.size.height - otherCellsHeight

    return (availableSpace > 80) ? availableSpace : 80

【讨论】:

【参考方案2】:

此答案适用于可能有太多不同高度的不同单元格的情况,因此计算单元格 0..n-1 的高度并不像@Mike Taverne 的答案那么容易。

在我的情况下,最后一个单元格应该垂直扩展,但应该有一个最小高度,所以它看起来不错。在这种情况下,tableView 是可滚动的。

代码如下:

public function tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    if item(for: indexPath) == "some condition" 
        return xxx // some number
    else if item(for: indexPath) == "some other condition" 
        return yyy // some other height
     ...
    else  // I KNOW THIS CELL WILL BE LAST 
        let minimalLastCellHeight = 200
        guard let previousCell = tableView.visibleCells.last else 
            return minimalLastCellHeight
        
        let lowestYCoordinate = previousCell.frame.maxY // low corner Y coordinate of previous cell
        return max(availableHeight - lowestYCoordinate, minimalLastCellHeight)

    

【讨论】:

【参考方案3】:

我在另一个帖子中回答了类似的问题。

 func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat

    if indexPath.row == 0  
          return firstRowHeight
     
    else if indexPath.row == 1  
          return secondRowHeight 
    
    else if indexPath.row == 2  
          return thirdRowHeight 
    
    else  
          return tableView.frame.size.height - firstRowHeight - secondRowHeight - thirdRowHeight
   


【讨论】:

以上是关于如何使uitableview的最后一行填充空白的主要内容,如果未能解决你的问题,请参考以下文章

C# DataGridView 数据显示到最后一行后,如何使滚动条继续向下滚动。

尝试自动填充到最后一行数据

如何使 UITableView 不改变 imageView 的框架,或调整图像大小以填充框架大小?

Swift - 当最后一行不可见时,如何对 UITableView 的最后一行执行特定操作?

如何在iOS中的UITableView的最后一行添加一行字符串?

如何通过平滑滚动将最后一行添加到 UITableView?