Как работать с клавиатурой с безопасной зоной в iphone x с помощью AutoLayout?

После установки безопасной зоны в iphone x. Когда клавиатура открывает безопасную область (белая область над клавиатурой), появляется над клавиатурой, так как обращаться с клавиатурой?

введите описание изображения здесь

Белая область над клавиатурой.

Код ручки клавиатуры: -

func keyboardWillChangeFrameWithNotification(_ notification: Notification, showsKeyboard: Bool) {

        let userInfo = notification.userInfo!
        let animationDuration: TimeInterval = (userInfo[UIKeyboardAnimationDurationUserInfoKey] as! NSNumber).doubleValue
        let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue

        // keyboardRect = [self.view convertRect:keyboardRect fromView:nil];
        let keyBoardRect = self.view.convert(keyboardScreenEndFrame, from:nil)

        UIView.animate(withDuration: animationDuration, delay: 0, options: .beginFromCurrentState, animations: {

            // Keyboard is going to appear. move composebar up
            if showsKeyboard {
                self.constraintBottomAttachmentView.constant =  keyBoardRect.size.height
            } else { // Keyboard is going to disappear. Move composebar down.
                self.constraintBottomAttachmentView.constant = 0
            }

            self.view.layoutIfNeeded()
            }, completion: { finished in
                // Update the height of recipient bar.
                self.updateRecipientBarMaxHeight()
        })
    }

высота клавиатуры увеличилась в iphone x, поэтому, если я вычту -34 из высоты клавиатуры, белая область уменьшится. Код:-

if showsKeyboard {
                  self.constraintBottomAttachmentView.constant =  keyBoardRect.size.height - self.view.safeAreaInsets.bottom /*(34)*/ } 

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


person Amey    schedule 18.12.2017    source источник


Ответы (1)


Вы можете получить высоту пространства внизу на iPhone X с помощью:

view.safeAreaInsets.bottom

Имейте в виду, что это доступно только в iOS 11 и выше, поэтому вам нужно это условие:

if #available(iOS 11.0, *) {
//Move Composebar for iOS 11
} else {
//Move Composebar for other Versions
}

В вашем случае это будет выглядеть примерно так:

if showsKeyboard {
      if #available(iOS 11.0, *) {
          self.constraintBottomAttachmentView.constant =  keyBoardRect.size.height - view.safeAreaInsets.bottom
      } else {
          self.constraintBottomAttachmentView.constant =  keyBoardRect.size.height
} else { // Keyboard is going to disappear. Move composebar down.
      self.constraintBottomAttachmentView.constant = 0
}

Это работает для вас?

person Toan Nguyen    schedule 05.01.2018
comment
я уже написал этот код выше, я хочу оптимизировать способ без ручного обновления ограничения из кода с автомакетом. - person Amey; 05.01.2018