Вы можете установить contentInset более одного раза? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть табличное представление с ячейками таблицы.Каждая ячейка имеет текстовое поле.У меня есть следующий код для предотвращения блокировки нескольких нижних ячеек с помощью клавиатуры

@objc func keyboardWillShow(_ notification:Notification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
    }
}
@objc func keyboardWillHide(notification: NSNotification) {
    tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(TransactionViewController.keyboardWillHide), name: UIApplication.keyboardWillChangeFrameNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(TransactionViewController.keyboardWillShow), name: UIApplication.keyboardWillChangeFrameNotification, object: nil)
}

Функция keyboardWillHide работает, как и ожидалось.Однако, когда клавиатура скрыта, стол отскакивает назад вниз, в результате чего лишние пробелы не отображаются (это то, что я хочу).Что мне не нравится, так это то, как вы все еще можете прокручивать таблицу вниз до contentInset, откуда клавиатура была впервые показана.Есть ли способ сделать так, чтобы после исчезновения клавиатуры вы не могли прокрутить вниз по нижней части таблицы?

1 Ответ

0 голосов
/ 13 ноября 2018

Заменить

keyboardFrameBeginUserInfoKey

с

keyboardFrameEndUserInfoKey

@objc func keyboardWillShow(_ notification:Notification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height, right: 0)
    }
}
@objc func keyboardWillHide(notification: NSNotification) {

    tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)        
}
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(TransactionViewController.keyboardWillHide), name: UIApplication.keyboardWillHideNotification, object: nil)

    NotificationCenter.default.addObserver(self, selector: #selector(TransactionViewController.keyboardWillShow), name: UIApplication.keyboardWillShowNotification, object: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...