这就是我所说的“关闭底部边框”:
第二行当前是“隐藏”(其高度设置为0)。当用户单击第一行时,将显示第二行(其高度已恢复)。如果有帮助,这里是隐藏和显示第二行的代码。
首先,我有一个成员变量,用于存储第二行是否打开(它是带有选择器视图的行):
var referenceLengthPickerIsOpen: Bool = false
以下是高度的确定方式:
override func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 && indexPath.row == 1 {
return referenceLengthPickerIsOpen ? 216.0 : 0.0
}
return super.tableView(tableView, heightForRowAt: indexPath)
}
以下是用户点击第一行以显示或隐藏第二行时的处理代码:
override func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath) {
self.tableView.deselectRow(at: indexPath, animated: true)
if indexPath.section == 0 && indexPath.row == 0 {
referenceLengthPickerIsOpen = !referenceLengthPickerIsOpen
tableView.beginUpdates()
tableView.endUpdates()
}
}
显示和隐藏部分效果很好,动画效果很好,第二行的高度从0变为216,反之亦然。
然而,在隐藏第二行之后,我留下了上图中显示的边界间隙。我知道原因:底部边框仅针对最后一行关闭,并且它当前是隐藏的。
我试图通过改变行数来解决这个问题:
override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return referenceLengthPickerIsOpen ? 2 : 1;
}
return super.tableView(tableView, numberOfRowsInSection: section)
}
但是,只要我点击第一行,这就会崩溃我的应用程序。