首页 > 解决方案 > 如何使表格视图单元格展开和折叠

问题描述

我有三个表格视图单元格,选择时到期日期单元格应扩展到 200,未选中时应扩展到 44(默认)。由于某种原因,它不会扩展。

我不能在 AutoLayout 中执行此操作,因为它必须更改,所以我尝试使用 switch 语句,当它位于特定索引路径上时,它应该扩展但它无法工作。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let normalCellHeight = CGFloat(44)
    let largeCellHeight = CGFloat(200)

    switch(indexPath) {
    case [1,0]: // Due Date Cell
        return isPickerHidden ? normalCellHeight : largeCellHeight

    case [2,0]: // Notes Cell
        return largeCellHeight

    default: return normalCellHeight

    }
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch(indexPath) {
    case [2,0]:
        isPickerHidden = !isPickerHidden

        dueDateLabel.textColor = isPickerHidden ? .black : tableView.tintColor

        tableView.beginUpdates()
        tableView.endUpdates()

    default: break
    }
}

预期结果:点击截止日期单元格,单元格展开以显示日期选择器

实际结果:单元格突出显示,但未展开。

标签: iosswifttableview

解决方案


尝试在didSelectRow里面重新加载单元格beginUpdatesendUpdates。看看下面的示例代码。根据您的需要选择行 realod 动画。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch(indexPath) {
case [2,0]:
    isPickerHidden = !isPickerHidden

    dueDateLabel.textColor = isPickerHidden ? .black : tableView.tintColor

    tableView.beginUpdates()
    tableView.reloadRows(at: [indexPath], with: .none)
    tableView.endUpdates()

default: break
}
}

推荐阅读