Какова высота экранной клавиатуры iPhone?
высота в портрете и высота в ландшафте измеряется в точках.
6 ответов:
я использовал следующий подход для определения кадра клавиатуры в 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
и эквивалентная реализация с Swift ... подпишитесь на уведомление:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil)
и метод, который вычисляет размер клавиатуры:
func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]! let rawFrame = value.CGRectValue() let keyboardFrame = view.convertRect(rawFrame, fromView: nil) println("keyboardFrame: \(keyboardFrame)") }
Swift 2.0
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardShown:", name: UIKeyboardDidShowNotification, object: nil)
и метод, который вычисляет клавиатуры размер:
func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let value: AnyObject = info[UIKeyboardFrameEndUserInfoKey]! let rawFrame = value.CGRectValue let keyboardFrame = view.convertRect(rawFrame, fromView: nil) print("keyboardFrame: \(keyboardFrame)") }
SWIFT 3.0
Обозреватель
NotificationCenter.default.addObserver(self, selector: #selector(keyboardShown), name:NSNotification.Name.UIKeyboardWillShow, object: nil);
метод
func keyboardShown(notification: NSNotification) { let info = notification.userInfo! let keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue print("keyboardFrame: \(keyboardFrame)") }
помните, что с iOS 8 размер экранной клавиатуры можете ВАР. Не думайте, что экранная клавиатура всегда будет видна (с конкретные высоты) или невидимым.
теперь, с iOS 8, пользователь также может прокручивать область предсказания текста и выключать... и когда они это сделают, он начнет приложение
keyboardWillShow
событие снова.этой будет перерыв много устаревших образцов кода, которые рекомендуется писать
keyboardWillShow
событие, которое просто измеряет текущую высоту экранной клавиатуры и сдвигает ваши элементы управления вверх или вниз на странице на эту (абсолютную) величину.другими словами, если вы видите какой-либо пример кода, который просто говорит вам добавить
keyboardWillShow
событие, измерьте высоту клавиатуры, а затем измените высоту ваших элементов управления на эту величину, это больше не будет всегда работать.в моем примере выше, я использовал в примере кода из следующий сайт, который анимирует вертикальные ограничения
constant
значение.в моем приложении, я добавил ограничение на мой
UITextView
, установлен в нижней части экрана. Когда экран впервые появился, я сохранил это начальное вертикальное расстояние.затем, когда
keyboardWillShow
событие начинается, я добавить (Новая) высота клавиатуры для этого исходного значения ограничения (так что ограничения изменяет высоту элемента управления).да. Это некрасиво.
и я немного раздражен / удивлен, что ужасно болезненный автозапуск XCode 6 не просто позволяет нам прикреплять нижние части элементов управления к нижней части экрана или к верхней части экранной клавиатуры.
возможно, я что-то упускаю.
кроме моего здравомыслия.
версия Примечание: это больше не Ценность В iOS 9 & 10, так как они поддерживают пользовательские размеры клавиатуры.
Это зависит от модели и панели 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 } }
Я не могу найти ответ, поэтому я проверяю все с симулятора.(iOS 11.0)
Устройство / Высота Экрана / Портрет / Пейзаж
iPhone 4s| 480.0 | 216.0 | 162.0
iPhone 5, iPhone 5s, 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 plus, iPhone 7 plus, iPhone 8 plus| 736.0 | 226.0 | 162.0
iPad 5-го поколения, iPad Воздух, iPad Air 2, iPad Pro 9.7, iPad Pro 10.5, iPad Pro 12.9 | 1024.0 | 265.0 | 353.0
спасибо!