Ответ 1
Высота портрета составляет 264, а высота ландшафта - 352.
Я знаю, что это поздний ответ, но я просто наткнулся на этот вопрос сам.
Я ищу здесь два номера: высота в портрете и высота в пейзаже. Не отвечайте в см или дюймах, а скорее в пикселях.
Высота портрета составляет 264, а высота ландшафта - 352.
Я знаю, что это поздний ответ, но я просто наткнулся на этот вопрос сам.
- (void) keyboardWasShown:(NSNotification *)nsNotification {
NSDictionary *userInfo = [nsNotification userInfo];
CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
// Portrait: Height: 264.000000 Width: 768.000000
// Landscape: Height: 352.000000 Width: 1024.000000
}
Ответ: зависит от.
Я знаю о 16 разных высотах, которые могут быть на клавиатуре, и может быть в любом положении.
Это другое:
Я прикрепил изображение, показывающее несколько различных возможных конфигураций.
Вместо перечисления всех 16 возможностей, я думаю, вы хотите наблюдать UIKeyboardWillShowNotification
/UIKeyboardWillHideNotification
и UIKeyboardDidChangeFrameNotification
(iOS 5.0+), а затем получать из этих событий фрейм клавиатуры.
На iPad размер клавиатуры также может зависеть от языка (например, японская клавиатура выше). Еще одна причина запросить его программно.
Вы можете получить высоту клавиатуры из словаря userInfo, возвращаемого приложением /show show/hide клавиатуры, как это предусмотрено в классе UIWindow (ссылка на справочное руководство). Это намного лучший способ получить высоту, чем жесткое кодирование, потому что вы получаете следующие преимущества:
На самом деле ответы на этот вопрос, которые дают точное число, скорее всего, получили это число, посмотрев на результаты, возвращаемые в этом словаре!
Я проголосовал за пару ответов на этой странице, поскольку они опасно вводят в заблуждение.
Конечно, с iOS 8 вы не можете использовать высоту жесткой клавиатуры.
Здесь мое приложение, работающее на iPhone, чтобы объяснить причину.
Возьмите свой линейку и скажите мне, какова высота экранной клавиатуры..?
Ах... ты не можешь это сделать, не так ли?
Высота может меняться, если пользователь включает панель автоматического типа в верхней части экранной клавиатуры (которая, кстати, вызывает второе событие keyboardWillShow
).
То же самое можно сказать и о экранной клавиатуре на iPad.
Нижняя строка: извините, вы должны измерять высоту клавиатуры в событии keyboardWillShow
.
В противном случае вы столкнетесь с проблемами.
- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *info = [notification userInfo];
NSValue *kbFrame = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardFrame = [kbFrame CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat heightOfKeyboard = keyboardFrame.size.height;
NSLog(@"The keyboard is now %d pixels high.", (int)heightOfKeyboard);
}
Btw, не забывайте, что вызов в convertRect
в коде выше.
Без этого я обнаружил, что на iPad, работающем в ландшафте с iOS 8, иногда клавиатура будет иметь высоту 1024 пикселя.
Еще одна вещь...
Сегодня я работал над настраиваемым элементом управления, который я написал в нижней части экрана iPhone/iPad, и понял, что я не учитывал высоту экранной клавиатуры.
Я не хотел добавлять уведомления о клавиатуреWillShow/Hide, поскольку этот небольшой элемент управления был общим, который можно вызвать с любого из моих экранов.
Мое решение найти высоту экранной клавиатуры, если она в настоящее время виден, заключалась в использовании превосходной функции visibleKeyboardHeight из бесплатного элемента управления SVProgressHUD
.
Этот элемент управления также нуждался в высоте экранной клавиатуры, поэтому его уведомление UIView
будет отображаться вертикально-центрированным.
Это сработало... так что если вам нужен быстрый "грязный" метод захвата высоты клавиатуры, возьмите копию этого кода и посмотрите в файле SVProgressHUD.m.
Вы можете найти это программно (через симулятор, если у вас нет устройства).
Я не знаю, что это такое, но вы могли бы понять это достаточно легко.
Посидите на своем iPad на странице с этим...
var totalHeight = window.innerHeight;
document.getElementById('what-is-my-height').onclick = function() {
alert(totalHeight - window.innerHeight);
};
<button id="what-is-my-height">Bring up keyboard, then push me</button>
Нажмите кнопку (после того, как вы подняли экранную клавиатуру), и она должна указать высоту. Повторите для другой ориентации.
В iOS 7 для iPad это 402 для пейзажа и 314 для портрета
Высоты: ПОРТРЕТ = 264 LANDSCAPE = 352
В iOS 7 возникла проблема, когда высота и ширина не менялись в ландшафтном режиме, но проблема была исправлена в iOS 8.
Итак, вот фрагмент кода, который всегда возвращал высоту для iOS7 или iOS8, тем самым устраняя проверку конкретной версии вашего кода.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
//Always gives the height as the height is of smaller dimension
CGFloat height = (kbSize.height>kbSize.width)?kbSize.width:kbSize.height;
}
Я думаю, что есть больше проблем, чем в других ответах. Например, вы можете использовать эту клавиатуру:
Это происходит, когда вы нажимаете кнопку "скрыть" на iPad-клавиатуре на iOS 9. Эта клавиатура имеет размер full
в информации уведомлений от ответа Mike Gledhill
. (в UIKeyboardFrameEndUserInfoKey
высота клавиатуры выше 300).
Мне пришлось вычесть начало оси вектора с высоты устройства, чтобы получить правильное значение.
- (void)keyboardWillShow:(NSNotification *)notification
NSDictionary *info = [aNotification userInfo];
CGRect keyboardFrame = [info[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
keyboardFrame = [info[UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardFrame = [self.view convertRect:keyboardFrame fromView:nil];
CGFloat yPosition = keyboardFrame.origin.y;
NSInteger height = [UIScreen mainScreen].bounds.size.height - yPosition;
}
Работает для меня на iOS9 с iPhones и iPads в обеих ориентациях.