Самая нижняя ячейка моего табличного представления - это ячейка с textField.Когда пользователь нажимает на него, я хочу прокрутить его так, чтобы ячейка находилась прямо над клавиатурой.
Когда я вызываю scrollRectToVisible(...)
с animated
false
, все работает как положено, но когда animated
установлен на true
таблица прокручивает ячейку только настолько, что нижняя часть textField находится прямо над клавиатурой (см. левое изображение) .Тем не менее, bottonInsets должны быть правильными, так как я могу прокрутить ячейку до последнего бита вручную, и ячейка будет расположена как надо (см. Рисунок справа) .
Я думаю, что табличное представление прокручиваетНижний край textField над клавиатурой является поведением таблицы по умолчанию, но, боюсь, я не знаю, почему он переопределяет мою собственную прокрутку, когда я хочу, чтобы она была анимирована.
Левое изображение:
Нижний край textFields прямо над клавиатурой (я сохранил стиль рамки, чтобы вы могли видеть его лучше).
Правая картинка: как я этого хочу.Нижний край ячейки справа над клавиатурой.
func repositionTextfieldCell(in tableView: UITableView) {
guard let textFieldCell = tableView.bottommostCell() else { return }
guard let keyboardRect = activeKeyboardRect else { return }
// - Adjust insets
var bottomInset = keyboardRect.size.height
tableView.contentInset.bottom = bottomInset
tableView.scrollIndicatorInsets.bottom = bottomInset
// - Make cell visible
let x = textFieldCell.frame.minX
let y = textFieldCell.frame.maxY
tableView.scrollRectToVisible(CGRect(origin: CGPoint(x: x, y: y),
size: CGSize(width: 1, height: 1)), animated: true)
}