在UITableView中,如何在隐藏后面的行后关闭行的下边框?

时间:2017-02-11 16:13:16

标签: ios swift uitableview uipickerview

这就是我所说的“关闭底部边框”:

enter image description here

第二行当前是“隐藏”(其高度设置为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)
}

但是,只要我点击第一行,这就会崩溃我的应用程序。

2 个答案:

答案 0 :(得分:1)

我认为底部边框可能是UITableView的默认分隔线。将separatorInset的{​​{1}}设置为0可以解决问题,如果这是真的

您可以通过以下方式完成此操作。

UITableView

上面的代码关闭了底部边框。

您可以隐藏分隔符来隐藏底部边框。

self.tableView.separatorInset = UIEdgeInsets.zero

如果它能解决问题,请告诉我。

答案 1 :(得分:1)

转到故事板,选择单元格转到分隔符,自定义插图并将其设为0.下面是图像。

enter image description here

enter image description here

更新

enter image description here