如何根据可见单元格的大小调整tableview单元格的高度?

时间:2019-02-04 02:03:06

标签: swift uitableview

在下面的代码中,是一个函数,当点击一个按钮时,该函数隐藏UITableView Cell元素。如何根据剩余的可见元素调整像元高度?每个单元格都是一行。

我尝试使用自动UITableView.automaticDimension来调整单元格的大小,但这没用。

这是我对自定义单元格应如何工作的看法:创建后,该单元格将显示其全部内容。轻按某个按钮时,将隐藏按钮下方的单元格的所有元素,仅保留按钮和与按钮相同高度级别的元素,并将其余单元格高度重新调整为可见元素。然后,再次点击该按钮后,将再次以适当的单元格大小显示该单元格的全部内容。

func customCellDidTapCollapse(_ cell: customCell) {
    if collapsed {
        cell.item1.isHidden = false
        cell.item2.isHidden = false
        cell.item3.isHidden = false
        cell.item4.isHidden = false
        collapsed = false
    } else {
        cell.item1.isHidden = true
        cell.item2.isHidden = true
        cell.item3.isHidden = true
        cell.item4.isHidden = true
        collapsed = true
    }
}

2 个答案:

答案 0 :(得分:0)

我认为您可以使用tableView(_:heightForRowAt :)方法并根据“已折叠”布尔值返回0或其他非零值。

在此处查看更多信息:https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614998-tableview

答案 1 :(得分:0)

我的解决方法是:

  1. 在DataModel中声明一个布尔变量,例如“ isOpen”或“ opened”
  2. 将所有数据的“打开”变量初始化为false
  3. 在tableViewDelegation中,覆盖功能

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if data[indexPath.row].opened {
        return 150
    } else {
        return 50
    }
    

    }

  4. 覆盖tableViewDelegate(_:didSelectRowAt:)

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    //If last opened cell is different than selected now, close the last opened cell
    
    if lastOpened != indexPath.row {
       data[lastOpened].opened = false
    }
    //Hold the last opened cell index
    lastOpened = indexPath.row
    let isOpen = data[indexPath.row].opened
    //Open/close
    data[indexPath.row].opened = isOpen ? false : true
    myTable.reloadData()
    

    }