Высота в портрете и высота в ландшафте, измеренная в точках.
Какова высота экранной клавиатуры iPhone?
Ответ 1
Высота клавиатуры составляет 216pts для портретного режима и 162pt для ландшафтного режима.
Ответ 2
Я использовал следующий подход для определения рамки клавиатуры в iOS 7.1.
В методе init моего контроллера представления я зарегистрировался для UIKeyboardDidShowNotification
:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(keyboardOnScreen:) name:UIKeyboardDidShowNotification object:nil];
Затем я использовал следующий код в keyboardOnScreen:
чтобы получить доступ к кадру клавиатуры. Этот код получает словарь userInfo
из уведомления и затем обращается к NSValue
связанному с UIKeyboardFrameEndUserInfoKey
. Затем вы можете получить доступ к CGRect и преобразовать его в координаты вида вашего контроллера представления. Оттуда вы можете выполнять любые необходимые расчеты на основе этого кадра.
-(void)keyboardOnScreen:(NSNotification *)notification
{
NSDictionary *info = notification.userInfo;
NSValue *value = info[UIKeyboardFrameEndUserInfoKey];
CGRect rawFrame = [value CGRectValue];
CGRect keyboardFrame = [self.view convertRect:rawFrame fromView:nil];
NSLog(@"keyboardFrame: %@", NSStringFromCGRect(keyboardFrame));
}
стриж
И эквивалентная реализация с Swift:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
@objc
func keyboardDidShow(notification: Notification) {
guard let info = notification.userInfo else { return }
guard let frameInfo = info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardFrame = frameInfo.cgRectValue
print("keyboardFrame: \(keyboardFrame)")
}
Ответ 3
Помните, что с iOS 8 размер экранной клавиатуры может меняться. Не предполагайте, что экранная клавиатура всегда будет видна (с определенной высотой) или невидимой.
Теперь, с iOS 8, пользователь может также прокрутить область прогнозирования текста и выключить..., и когда они это сделают, это снова вызовет событие app keyboardWillShow
.
Это сломает множество образцов устаревших кодов, которые рекомендуют записывать событие keyboardWillShow
, которое просто измеряет текущую высоту экранной клавиатуры и перемещает ваши элементы управления вверх или вниз на странице по этой (абсолютной) сумме.
Другими словами, если вы видите какой-либо пример кода, который просто говорит вам добавить событие keyboardWillShow
, измерьте высоту клавиатуры, а затем измените размеры своих элементов управления на эту величину, это больше не будет работать всегда.
В моем примере выше я использовал пример кода со следующего сайта, который анимирует вертикальные ограничения constant
.
Практическое использование AutoLayout
В моем приложении я добавил ограничение на мой UITextView
, установленный в нижней части экрана. Когда экран появился впервые, я сохранил это начальное вертикальное расстояние.
Затем, всякий раз, когда происходит событие keyboardWillShow
, я добавляю (новую) высоту клавиатуры к этому первоначальному значению ограничения (поэтому ограничение изменяет высоту управления).
Да. Это уродливо.
И я немного раздражаюсь/удивляюсь, что XCode 6 ужасно-мучительный AutoLayout не просто позволяет нам прикреплять нижние элементы управления ни к нижней части экрана, ни к верхней части экранной клавиатуры.
Возможно, я что-то упустил.
Кроме моего здравого смысла.
Ответ 4
примечание к версии: это больше не значение в iOS 9 и 10, поскольку они поддерживают пользовательские размеры клавиатуры.
Это зависит от модели и панели QuickType:
Ответ 5
Высота клавиатуры зависит от модели, панели QuickType, пользовательских настроек... Наилучший подход вычисляется динамически:
Swift 3.0
var heightKeyboard : CGFloat?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardShown(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}
func keyboardShown(notification: NSNotification) {
if let infoKey = notification.userInfo?[UIKeyboardFrameEndUserInfoKey],
let rawFrame = (infoKey as AnyObject).cgRectValue {
let keyboardFrame = view.convert(rawFrame, from: nil)
self.heightKeyboard = keyboardFrame.size.height
// Now is stored in your heightKeyboard variable
}
}
Ответ 6
Я не могу найти последний ответ, поэтому я проверяю все с помощью симулятора. (iOS 11.0)
Устройство | Высота экрана | Портрет | Пейзаж
iPhone 4s | 480,0 | 216,0 | 162,0
iPhone 5, iPhone 5, iPhone SE | 568,0 | 216,0 | 162,0
iPhone 6, iPhone 6s, iPhone 7, iPhone 8, iPhone X | 667,0 | 216,0 | 162,0
iPhone 6 плюс, iPhone 7 плюс, iPhone 8 плюс | 736,0 | 226,0 | 162,0
iPad 5-го поколения, iPad Air, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024,0 | 265,0 | 353,0
Спасибо!
Ответ 7
iPhone
KeyboardSizes:
- 5S, SE, 5, 5C (320 × 568) клавиатураSize = (0,0, 352,0, 320,0, 216,0) клавиатураSize = (0,0, 315,0, 320,0, 253,0)
2,6S, 6,7,8: (375 × 667): размер клавиатуры = (0,0, 407,0, 375,0, 260.
3. 6+, 6S +, 7+, 8+: (414 × 736) клавиатураSize = (0,0, 465,0, 414,0, 271,0)
4.XS, X: (375 X 812) размер клавиатуры = (0,0, 477,0, 375,0, 335,0)
5.XR, XSMAX ((414 x 896) размер клавиатуры = (0,0, 550,0, 414,0, 346,0)