iOS нет высоты для клавиатуры, так как данные уведомлений равны нулю - PullRequest
0 голосов
/ 23 ноября 2018

Я работал над получением высоты клавиатуры в swift 4.2.Я использую Центр уведомлений для вызова функции, когда на клавиатуре отображается сообщение, которое принимает уведомление в качестве параметра, что я считаю довольно стандартным?Здесь я хочу рассчитать высоту.Однако в объекте уведомления отсутствуют данные, и я не могу рассчитать высоту.

NSConcreteNotification 0x16e43a710 {
    name = UIKeyboardDidShowNotification; userInfo = {
       UIKeyboardAnimationCurveUserInfoKey = 7;
       UIKeyboardAnimationDurationUserInfoKey = "0.25";
       UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {0, 0}}";
       UIKeyboardCenterBeginUserInfoKey = "NSPoint: {0, 0}";
       UIKeyboardCenterEndUserInfoKey = "NSPoint: {0, 0}";
       UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {0, 0}}";
       UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 0}, {0, 0}}";
       UIKeyboardIsLocalUserInfoKey = 1;
    }
}

Я вызываю функцию commonInit из моего метода init, которая устанавливает методы для вызова:

private func commonInit() {
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(notification:)), name: UIResponder.keyboardDidShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

}

Функция KeyboardWillShow

@objc private func keyboardWillShow(notification:NSNotification) {

    let userInfo = notification.userInfo! as NSDictionary
    let keyboardFrame = userInfo.value(forKey: UIResponder.keyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height

    print(keyboardHeight)
}

Чего-то не хватает?получить данные уведомления?

1 Ответ

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

Вот что я всегда использую:

func addObservers() {
        NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillShowNotification,
                                               object: nil,
                                               queue: nil) { [weak self] (notification) in
                                                self?.keyboardWillShow(notification: notification as NSNotification)
        }

        NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillHideNotification,
                                               object: nil,
                                               queue: nil) {  [weak self] (notification) in
                                                self?.keyboardWillHide(notification: notification as NSNotification)
        }

    }


func keyboardWillShow(notification: NSNotification) {
        if let userInfo = notification.userInfo {
            let keyboardHeight = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as AnyObject).cgRectValue.size.height
     }
     //... do your stuff...
 }
...