Табличные представления прокручиваются только к нижнему краю текстовых полей. - PullRequest
0 голосов
/ 19 мая 2018

Самая нижняя ячейка моего табличного представления - это ячейка с textField.Когда пользователь нажимает на него, я хочу прокрутить его так, чтобы ячейка находилась прямо над клавиатурой.

Когда я вызываю scrollRectToVisible(...) с animated false, все работает как положено, но когда animated установлен на true таблица прокручивает ячейку только настолько, что нижняя часть textField находится прямо над клавиатурой (см. левое изображение) .Тем не менее, bottonInsets должны быть правильными, так как я могу прокрутить ячейку до последнего бита вручную, и ячейка будет расположена как надо (см. Рисунок справа) .

Я думаю, что табличное представление прокручиваетНижний край textField над клавиатурой является поведением таблицы по умолчанию, но, боюсь, я не знаю, почему он переопределяет мою собственную прокрутку, когда я хочу, чтобы она была анимирована.

Левое изображение:
Нижний край textFields прямо над клавиатурой (я сохранил стиль рамки, чтобы вы могли видеть его лучше).

Правая картинка: как я этого хочу.Нижний край ячейки справа над клавиатурой.

enter image description here

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)
}

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я мог бы решить проблему.

Поведение, похоже, зависит от того, где вызывается scrollRectToVisible(...).Поведение, которое я описал в этом вопросе, происходит, когда scrollRectToVisible(...) вызывается в keyboardDidShow(...).

Однако, когда вы вызываете scrollRectToVisible(...) в keyboardWillShow(...) и устанавливаете animated в false, ячейка / прямоугольникподтолкнул клавиатуру. Что я думаю, выглядит великолепно.

0 голосов
/ 19 мая 2018

добавьте это в viewDidLoad () и создайте ограничение NSlayout для основания таблицы.

NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil
)

создайте функцию

@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue {
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height
    tableBottomConstraint.constant = self.view.frame.height - keyboardHeight
}
}

повторите процесс для сброса tableBottomConstraint.constant = 0в методе клавиатурыWillHide ().

...