Получить размер клавиатуры с помощью панели подсказок Swift - PullRequest
0 голосов
/ 08 октября 2019

В моем приложении мне нужно получить размер клавиатуры для того, чтобы после того, как другие компоненты переместились в правильное положение, теперь я использую этот код для получения высоты

let info:NSDictionary = aNotification.userInfo! as NSDictionary
let kbSize:CGSize = (info.object(forKey: UIResponder.keyboardFrameEndUserInfoKey)! as AnyObject).cgRectValue.size
print(kbSize.height)

В первый раз, когда клавиатура открыта,результат равен 260.0, но это значение имеет размер по умолчанию, без высоты панели предложений / паролей, когда я нажимаю и снова нажимаю на входе, получается значение 304.0, которое я хочу ... Как я могу получить значение 304 с момента первого щелчка ввход?

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Вы можете попробовать это;

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(notification:)), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
    }

    deinit {
        NotificationCenter.default.removeObserver(UIResponder.keyboardWillShowNotification)
        NotificationCenter.default.removeObserver(UIResponder.keyboardWillHideNotification)
        NotificationCenter.default.removeObserver(UIResponder.keyboardWillChangeFrameNotification)
    }

    @objc func keyboardWillChange(notification: Notification) {

        guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }

        if notification.name == UIResponder.keyboardWillChangeFrameNotification || notification.name == UIResponder.keyboardWillShowNotification {
            view.frame.origin.y = -keyboardSize.height
        } else {
            view.frame.origin.y = 0
        }
    }
}

ЗДЕСЬ это Github gist

0 голосов
/ 09 октября 2019

Вы должны прислушиваться к изменениям размера клавиатуры и корректировать остальную часть своего контента таким образом, поскольку, как вы узнали, клавиатуры iOS могут изменять размер. Вы должны подписаться на UIResponder.keyboardWillChangeFrameNotification и / или UIResponder.keyboardDidChangeFrameNotification, которые являются уведомлениями, которые срабатывают, когда рамка клавиатуры изменится или изменилась. Вот пример его использования:

// Somewhere in set up code
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidChangeFrame),
    name: UIResponder.keyboardDidChangeFrameNotification, object: nil)

// Function elsewhere in your class
@objc func keyboardDidChangeFrame(_ notification: Notification) {
  guard let kbSize = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey]
      as? CGRect else {
    return;
  }

  // Use kbRect as you initially did
}

Обратите внимание, что вы можете использовать уведомления либо Will, либо Did в зависимости от того, как вы хотите, чтобы изменение макета выглядело. Вы также можете запросить как UIResponder.keyboardFrameBeginUserInfoKey UIResponder.keyboardFrameEndUserInfoKey, чтобы получить кадр клавиатуры до и после изменения размера, что может быть полезно, если вы хотите анимировать свой макет вместе с клавиатурой.

...