UITableView проблема с автоматической прокруткой при появлении клавиатуры - PullRequest
0 голосов
/ 16 января 2020

Я использую обычный UITableViewController с static cells (1 ячейка). Имея несколько UITextfields внутри, внутри StackView Поскольку это UITableView, прокрутка обрабатывается автоматически, но проблема в том, что она прокручивается в случайные позиции при нажатии поля UIText.

Это первый экран Это второй экран Это третий экран Это четвертый экран

Первый снимок экрана - страница без клавиатуры. Второй снимок экрана - при нажатии текстового поля «Имя» (нормальное поведение). Третий снимок экрана - при нажатии текстового поля «Фамилия» (поведение ?? !!). 1013 *

Я не использую какие-либо внешние библиотеки для обработки клавиатуры

Я не использую какой-либо код для добавления вставок, обработки прокрутки или управления клавиатурой.

Текстовые поля располагаются в правильном порядке (TxtFname, TxtLname, TxtFatherName ....)

Поля UIText размещаются внутри стека. Может кто-нибудь сказать мне, в чем проблема?

Ответы [ 4 ]

0 голосов
/ 16 января 2020

Я сделал исправление для этой проблемы, комбинируя различные ответы, опубликованные здесь, и немного больше.

 override func viewWillAppear(_ animated: Bool) {
           //  super.viewWillAppear(animated)
         }

Комментирование viewWillAppear(animated) отключает автоматическую c прокрутку UITableViewController.

Теперь в ViewDidLoad () добавлено 2 наблюдателя уведомлений

      NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)


        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

и их функция как

@objc func keyboardWillShow(notification: NSNotification) {
        if !isKeyboardShowing {
            if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
                let keyboardHeight = keyboardSize.height

                let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as! NSNumber
                let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as! NSNumber

                adjustTableViewInsets(keyboardHeight: keyboardHeight, duration: duration, curve: curve)
            }
        }
    }

    @objc func keyboardWillHide(notification: NSNotification) {
        let duration = notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as! NSNumber
        let curve = notification.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as! NSNumber
        adjustTableViewInsets(keyboardHeight: 0, duration: duration, curve: curve)
    }

. Это обеспечит дополнительное пространство для пользователя для прокрутите страницу до конца, даже если клавиатура видна.

Теперь я использовал IQKeyboardManager для дополнительной функциональности стрелок ВВЕРХ и ВНИЗ, чтобы перейти к следующей UITextField, и кнопки ГОТОВО, чтобы закрыть клавиатуру.

0 голосов
/ 16 января 2020

Вы можете использовать третье лицо для управления клавиатурой с помощью прокрутки UIView или UITableview.
pod 'IQKeyboardManager' Это третье лицо, которое может помочь вам управлять прокруткой. Если вы не хотите прокручивать заголовок, сделайте его в другом представлении, кроме табличного. И убедитесь, что вы правильно использовали автоматические макеты.

func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
    if tblProfile.isDecelerating {
        view.endEditing(true)
    }
}

Используйте этот код при прокрутке таблицы вручную без использования клавиатуры до go в следующем текстовом поле, этот метод будет вызван и будет скрыт клавиатура. После нажатия на текстовое поле снова появляется клавиатура.

0 голосов
/ 16 января 2020

Вы можете go поверх моего предыдущего решения. Он точно решает описанную проблему.

подвижная клавиатура при редактировании нескольких текстовых полей с ограничениями swift

0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...