即使有空单元格,swift3 scrollToRow

时间:2016-10-05 12:42:18

标签: ios swift uitableview uiscrollview swift3

我正在寻找一种方法来滚动到UITableView中的选定单元格,即使底部有空单元格也是如此。我的问题是,当表视图底部没有单元格时,滚动事件不会滚动。

作为一种解决方法,我最终在底部创建了空单元格并删除了这些单元格,但我不认为这是一个很好的解决方案。那么这样做的方式是怎样的呢?

我的代码如下所示:

func scrollToSelectedCell(indexPath: IndexPath) {
    self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath)

    if (cell as? DropDownCell) != nil {
        self.performSegue(withIdentifier: "showDropDownSelector", sender: cell)
    } else if (cell as? PickerCell) != nil {
        self.performSegue(withIdentifier: "showPickerSelector", sender: cell)
    } else if let tmp_cell = cell as? TextFieldCell {
        scrollToSelectedCell(indexPath: indexPath)
        tmp_cell.textField.becomeFirstResponder()
    }

}

1 个答案:

答案 0 :(得分:1)

使用UITableView继承自UIScrollView的事实,您可以更优雅地完成此操作。这允许您使用为tableView设置内容插入然后更改内容偏移的组合。

使用contentInset属性在单元格下方的表格视图中添加边距:

tableView.contentInset = UIEdgeInsetMake(top: 0, left: 0, bottom: A LARGE NUMBER, right: 0)

然后使用contentOffset设置您希望内容的初始位置在滚动视图中的位置:

tableView.contentOffset = CGPoint(x: 0, y: SOME OTHER LARGE NUMBER TO POSITION CENTRALLY IN THE MARGIN)

您可以通过以下网址获取更多信息:https://developer.apple.com/reference/uikit/uiscrollview

希望有所帮助。