Какова высота экранной клавиатуры iPhone?


высота в портрете и высота в ландшафте измеряется в точках.

6 79

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 событие, которое просто измеряет текущую высоту экранной клавиатуры и сдвигает ваши элементы управления вверх или вниз на странице на эту (абсолютную) величину.

enter image description here

другими словами, если вы видите какой-либо пример кода, который просто говорит вам добавить keyboardWillShow событие, измерьте высоту клавиатуры, а затем измените высоту ваших элементов управления на эту величину, это больше не будет всегда работать.

в моем примере выше, я использовал в примере кода из следующий сайт, который анимирует вертикальные ограничения constant значение.

Практикуя AutoLayout

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

затем, когда keyboardWillShow событие начинается, я добавить (Новая) высота клавиатуры для этого исходного значения ограничения (так что ограничения изменяет высоту элемента управления).

enter image description here

да. Это некрасиво.

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

возможно, я что-то упускаю.

кроме моего здравомыслия.

Высота клавиатуры составляет 216pts для портретного режима и 162pts для ландшафтного режима.

источник

версия Примечание: это больше не Ценность В iOS 9 & 10, так как они поддерживают пользовательские размеры клавиатуры.

Это зависит от модели и панели QuickType:

enter image description here

http://www.idev101.com/code/User_Interface/sizes.html

высота клавиатуры зависит от модели, панели быстрого ввода, пользовательских настроек... Лучший подход - вычислить динамически:

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


спасибо!