Я использую ниже код, чтобы получить высоту клавиатуры. Затем используйте эту высоту, чтобы рассчитать фрейм UIView
чтобы убедиться, что этот UIView
только на верхней части клавиатуры.
Но в симуляторе iPhoneX выход составляет 333
а симулятор iPhone 8 - 258
.
ВОПРОС: Если вы используете 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)
}
}
Как и этот образ, зеленая граница должна быть дополнительной. На самом деле, мне нужна красная часть только на верхней части клавиатуры без зеленого прямоугольника.
РЕДАКТИРОВАТЬ
OK, с помощью @Craig help, я нашел этот метод, только вызываемый 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, но если вы используете представление контейнера, это значение может быть другим, например my 22.0.