在不使用额外单元格的情况下展开 TableViewCell

Expand TableViewCell without using an extra cell

我正在使用带有自定义单元格的 UITableView。每个单元都有自己的 nib 文件和一个控制器。在一个单元格中,我想让用户 select 约会。默认日期显示在单元格上。当用户单击单元格时,UIPickerView 应该在单元格上展开。我在论坛上发现了多个类似的问题,但它们都使用了一个包含 UIPickerView 的额外单元格。在我的应用程序中,我需要使用一个包含标签和 Pickerview 的 nib 文件。也许当单击单元格时,我应该显示 pickerView 并更新单元格高度,当再次单击单元格时,我应该隐藏它并再次更新高度。我在某处看到了一个示例,但它是用 Objective-C 编写的。您认为可以通过这种方式实现吗?是否有 Swift 示例?

好吧,要解决该问题,您只需在单元格视图中设置标签和选择器之间的固定垂直间距。看这张截图

然后,每次用户点击单元格时,您只需重新加载 table 具有更新的单元格高度的视图。这是源代码:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

fileprivate var cellExpanded = false

// MARK: - UITableView datasource & delegate

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "PickerCell")!

    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return (cellExpanded) ? 260:44
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    cellExpanded = !cellExpanded
    tableView.reloadData()
}
}