Подтвердить что ты не робот

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

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

4b9b3361

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

enter image description here

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

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

Практическое использование AutoLayout

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

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

enter image description here

Да. Это уродливо.

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

Возможно, я что-то упустил.

Кроме моего здравого смысла.

Ответ 4

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

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

enter image description here

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

Ответ 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:

  1. 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)