Я тоже столкнулся с этой проблемой. Что я сделал, просто проверяю клавиатуру, которая отличается на iPhone 7 и iPhone X. Я просто добавляю поле по умолчанию с высотой клавиатуры. Теперь он работает нормально на каждом устройстве.

ользую код ниже, чтобы получить высоту клавиатуры. Затем используйте эту высоту для расчета кадраUIView чтобы убедиться, что этоUIView только на верхней части клавиатуры.

Но в симуляторе iPhoneX вывод333 и симулятор iPhone 8258.

ВОПРОС: Если использоватьrect.height как высота клавиатуры для симулятора iPhone 8, то раскладка правильная. Для iPhone X есть разрыв междуUIView и клавиатура. Что значит333 выше реальной высоты клавиатуры в iPhone X.

В чем причина высоты отличаются? А как получить правильную высоту клавиатуры?

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


@objc func keyboardWillShow(_ notification: NSNotification) {
        if let rect = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
           print(rect.height)
        } 
    }

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

РЕДАКТИРОВАТЬ

Хорошо, с помощью @ Craig я обнаружил, что этот метод вызывается только iPhone X. Поэтому я обновляю фрейм здесь. Просто вставьте код здесь.

Высота дна безопасной зоны 22,0, кажется, не правильно.

override func viewSafeAreaInsetsDidChange() {
    if #available(iOS 11.0, *) {
        super.viewSafeAreaInsetsDidChange()
        view.safeAreaInsets.bottom // This value is the bottom safe area place value.
    }
}

EDIT2 Как обычноview.safeAreaInsets.bottom должно быть 34.0, но если вы используете контейнер, это значение может отличаться, как у меня 22.0.

Ответы на вопрос(4)

Ваш ответ на вопрос