Яка висота екранної клавіатури iPhone?


84

Висота в портреті та висота в пейзажі, виміряна в балах.


2
Тут ви можете знайти всі розміри iPhone: розміри iPhone
Pfitz

3
Не використовуйте останнє посилання "Розміри iPhone"! Це з 2011 року, до появи iOS 8, і дозволило змінювати висоту екранної клавіатури.
Майк Гледхілл

Висота екранної клавіатури @MikeGledhill змінюється навіть до iOS 8.
Перевизначення

Пов’язане: Якщо ви шукаєте фактичні значення висот клавіатури (наприклад, для налагодження), див. Висоту клавіатури на іноземній мові iOS?
Почутливий

Відповіді:


211

Я використав наступний підхід для визначення кадру клавіатури в 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)")
}

4
Хоча це здається трохи залученим, це, безумовно, краще, ніж жорстке кодування розміру клавіатури. Правильна відповідь.
n13

2
Проголосував за цю відповідь і не підтримав питання. OP точно не знає, про що він говорить. Будьте обережні, хлопці! Ця відповідь правильна!
superarts.org

2
одне доповнення для альбомної орієнтації: if (SYSTEM_VERSION_LESS_THAN (@ "8.0")) {_keyboardHeight = keyboardFrame.size.width; } ще {_keyboardHeight = keyboardFrame.size.height; }
LiangWang

3
Чи є спосіб зробити це, не маючи появи клавіатури? У моєму випадку я хочу мати щось за клавіатурою такої ж висоти (подібно до того, як є речі у месенджерів)
Джон,

@ superarts.org Не потрібно голосувати за питання; люди, швидше за все, шукатимуть це, і тепер вони побачать цю відповідь .. так що все добре :)
Яцк

46

Пам’ятайте, що з iOS 8 розмір екранної клавіатури може змінюватися. Не припускайте, що екранна клавіатура завжди буде видимою (з певною висотою) або невидимою.

Тепер, з прошивкою 8, користувач може також красти область тексту передбачення і вимикатися ... і коли вони роблять це, було б штовхнути додаток , в keyboardWillShowподія знову .

Це призведе до розбиття багатьох зразків застарілого коду, які рекомендували писати keyboardWillShowподію, яка просто вимірює поточну висоту екранної клавіатури та зміщує елементи керування вгору або вниз на сторінці на цю (абсолютну) величину.

введіть тут опис зображення

Іншими словами, якщо ви бачите будь-який зразок коду, який просто повідомляє вам додати keyboardWillShowподію, виміряти висоту клавіатури, а потім змінити висоту елементів керування на цю величину, це більше не завжди буде працювати.

У наведеному вище прикладі я використовував зразок коду з наступного сайту, який анімує значення вертикальних обмежень constant.

Практикуємо авторозкладку

У своєму додатку я додав обмеження до свого UITextView, встановленого внизу екрана. Коли екран з’явився вперше, я зберігав цю початкову вертикальну відстань.

Потім, щоразу, коли починається моя keyboardWillShowподія, я додаю (нову) висоту клавіатури до цього початкового значення обмеження (тому обмеження змінює висоту елемента управління).

введіть тут опис зображення

Ага. Це негарно.

І я трохи роздратований / здивований тим, що жахливо-болючий AutoLayout XCode 6 не просто дозволяє нам прикріпити нижню частину елементів керування або внизу екрана, або у верхній частині екранної клавіатури.

Можливо, я чогось пропускаю.

Крім моєї розсудливості.


насправді розмір клавіатури завжди змінюється, навіть у старих версіях iOS. наприклад, перевірити почерк китайською мовою
Повторне виявлення

Ой, не розумів цього. Мені просто здалося дивним, що так багато зразків "keyboardWillShow" завжди припускали, що ця подія буде просто викликана один раз, коли клавіатура з’явиться або зникне .. без функціональних можливостей, щоб справлятися з тим, що клавіатура залишається на екрані, але змінює свій розмір.
Mike Gledhill

1
@MikeGledhill Я думаю, ви будете використовувати "UIKeyboardWillChangeFrameNotification" для зміни кадру внаслідок обертання або показу (/ приховування) рядка передбачення тексту ...
Абдалрахман Шату,

Я щойно перевірив це за допомогою свого додатка. UIKeyboardWillChangeFrameNotification завжди отримує виклик ASWELL AS the eventWillShow, щоразу, коли я або роблю, що клавіатура відображається, або вмикаю або вимикаю область передбачення тексту. Тож це насправді не дуже допомагає. Я хочу сказати ... користувачам потрібно бути трохи обережними з цими подіями, ось і все.
Mike Gledhill

1
Чому цьому не набагато більше уваги?
rfoo

30

Висота клавіатури становить 216 пунктів для портретного режиму та 162 пункту для альбомного режиму.

Джерело


135
Якщо ви збираєтеся розміщувати запитання, на які відповідали самі, принаймні дайте гідні відповіді. Розмір клавіатури слід отримувати з об’єкта сповіщення, а не з жорстко закодованим значенням, взятим з якогось веб-сайту. Дивіться тут
jrturton

16
@jrturton Питання не в тому, як програмно знайти висоту. Це питання корисне не тільки програмістам, але і графічним дизайнерам тощо. Відповідь, яку ви просите, належить до іншого питання. Насправді є ще одне запитання з цією відповіддю: stackoverflow.com/a/7302291/310121
Erik B,

48
@ErikB Будь обережний. Розмір клавіатури залежить від мови та типу клавіатури.
Габріель

13
Для себе НІКОЛИ не використовуйте жорстко закодовані значення! Як сильний приклад, користувач може використовувати розділену (з двох частин) клавіатуру, яка не особливо дбає про висоту.
Тимо

6
Ця відповідь лінива і небезпечна. Будь ласка, отримайте висоту клавіатури з UIKeyboardDidShowNotification, оскільки фактичне значення, як правило, змінюється між основними версіями iOS. Дивіться відповідь Кена нижче.
Олександр

16

Примітка до версії: це більше не має значення в iOS 9 і 10, оскільки вони підтримують власні розміри клавіатури.

Це залежить від моделі та панелі QuickType:

введіть тут опис зображення

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


1
Примітка до версії : це більше не має значення в iOS 9 і 10, оскільки вони підтримують власні розміри клавіатури.
Raptor

10

Висота клавіатури залежить від моделі, панелі QuickType, налаштувань користувача ... Найкращий підхід - обчислити динамічно:

Свіфт 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
           }
    }

8

Я не можу знайти останню відповідь, тому перевіряю все на симуляторі. (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 плюс, 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


Дякую!


0

iPhone

Розміри клавіатури:

  1. Клавіатура 5S, SE, 5, 5C (320 × 568) Розмір = (0,0, 352,0, 320,0, 216,0) Розмір клавіатури = (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) клавіатура Розмір = (0,0, 465,0, 414,0, 271,0)

4.XS, X: (375 X 812) keyboardSize = (0.0, 477.0, 375.0, 335.0)

5.XR, XSMAX ((414 x 896) Розмір клавіатури = (0,0, 550,0, 414,0, 346,0)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.