添加单元格后TableView Auto Scrolling行为不正常

snj*_*mhj 6 iphone uitableview ios swift

查看设置:

我的TableView有3个部分,每个部分有4或9个单元格.每个Cell都有一个Label和TextField.在开始编辑每个部分的索引2处的单元格时,我重新加载现在将包含9个单元格的部分(将模型更新为dequeueCell,以便再添加5个单元格).

问题:

tableView按预期滚动(将文本字段显示到屏幕的可见部分)以用于该部分的未展开状态.但是在我通过开始编辑任何部分的索引2处的单元格的文本字段来添加单元格之后,tableView会滚动以隐藏文本字段.一旦任何部分扩展了单元格数量,就会对tableview中的任何单元格进行奇怪的滚动.此外,虽然发生了奇怪的滚动,但是重新加载了tableView(这导致焦点远离文本字段).我已经包含tableView.reloadSection(_:)didBeginEditing(:_)单元格的自定义委托中.我在iOS 9和10中看到过这个问题

对不起解释不好.谢谢

继承人Github Repo

而问题在这里 问题演示

PS我正在使用Swift 3和Xcode 8.3.3以及部署目标iOS 10

请不要在Swift 4和Xcode 9中建议回答

ris*_*shi 2

您需要再次将文本字段设置为第一响应者,重新加载部分文本字段后不再保留第一响应者。

您可能需要更改类似的内容 -

func didBeginEditing(textField: UITextField, cell: UITableViewCell) {
    guard let indexPath = tableView.indexPath(for: cell) else { return }

    if indexPath.row == 2 && !expandedSectionData[indexPath.section] {
        tableView.beginUpdates()
        expandedSectionData[indexPath.section] = true
        tableView.reloadSections(IndexSet(integer: indexPath.section), with: .automatic)
        tableView.endUpdates()

        // after tableview is reloaded, get cell again
        let cell = tableView.cellForRow(at: IndexPath(row: 2, section: indexPath.section)) as? TestCell
        cell?.textField.becomeFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过运行这个,对我来说看起来不错。