Пользовательская клавиатура: inputView: как изменить размер клавиатуры? - PullRequest
11 голосов
/ 18 мая 2011

Я реализовал текстовое поле с помощью пользовательской клавиатуры с функцией setInputView.Но у меня есть проблема: моя рамка клавиатуры не является стандартной рамкой для клавиатуры iphone.

Вопрос: Как я могу изменить размер моей пользовательской клавиатуры?Я знаю некоторые функции, такие как: UIKeyboardFrameBeginUserInfoKey, ..etc.

Обратите внимание: рамка клавиатуры iPhone = 0,264,320,216 Моя пользовательская рамка клавиатуры = 0,0,320,460

Надеюсь на сотрудничество, BestС уважением ... P

Ответы [ 5 ]

26 голосов
/ 26 октября 2011

Оказывается, что поведение по умолчанию для пользовательского представления ввода, которое вы назначаете свойству UITextField, заключается в изменении размера представления в том же фрейме, что и клавиатура по умолчанию.Попробуйте установить (я использую имя InputViewController для моего ввода, но вы можете использовать все, что вы хотите):

inputViewController = [[InputViewController alloc] initWithNibName:@"InputViewController" bundle:nil];
inputViewController.delegate = self;
inputViewController.view.autoresizingMask = UIViewAutoresizingNone; // This is the code that will make sure the view does not get resized to the keyboards frame.

Для получения более подробной информации, вы можете посмотреть эту ссылку , который предоставляется Apple .:

Если UIKit встречает представление ввода со значением UIViewAutoresizingF FlexibleHeight в своей маске авторазмера, он изменяет высоту, чтобы соответствовать клавиатуре.

Надеюсь, что поможет!

9 голосов
/ 27 марта 2015

Чтобы установить для ввода ввода клавиатуры тот же размер, что и у собственной клавиатуры, просто сделайте это:

inputView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

Чтобы установить свой собственный кадр, сделайте следующее:

inputView.autoresizingMask = UIViewAutoresizingNone;

Apple :

У вас есть большая гибкость в определении размера и содержимого представления ввода или вспомогательного представления ввода.Хотя высота этих представлений может быть такой, какой вы хотите, они должны быть такой же ширины, что и системная клавиатура.Если UIKit встречает представление ввода со значением UIViewAutoresizingF FlexibleHeight в маске авторазмера, оно изменяет высоту в соответствии с клавиатурой.Нет никаких ограничений на количество подпредставлений (таких как элементы управления), которые могут иметь входные представления и входные вспомогательные представления.Для получения дополнительной информации о представлениях ввода и дополнительных видах ввода см. Рекомендации по интерфейсу пользователя iOS.

1 голос
/ 11 октября 2015

Также, если вы используете UIViewController для разработки вашего inputView, не используйте UIViewController.view ... кажется, что есть много проблем с неправильным изменением размера при повороте независимо от AutoresizeMask.

Что мне помогло, так это взять мой существующий пользовательский интерфейс и использовать «Редактор»> «Встроить»> «Вид». Затем создайте новую розетку и передайте эту розетку в качестве inputView. Внезапно исчезли изменения размера при повороте ошибок.

1 голос
/ 04 июня 2011

У меня была такая же проблема.Я решил это, зарегистрировавшись для UIKeyboardDidShowNotification (UIKeyboardWillShowNotification, к сожалению, не работал), а затем изменил размер представления после того, как клавиатура была показана.Тем не менее, он все еще имел белый ящик на верхней части клавиатуры, когда он двигался вверх.Это работало хорошо для меня, потому что это идет по UITextView с белым фоном.Однако, если вы заходите поверх каких-либо других цветных объектов, то перед изменением размера представления будет выглядеть немного некрасиво.Вы можете решить эту проблему, установив цвет фона в clearColor.

// Add this while initializing your view
self.backgroundColor = [UIColor clearColor]; // Needed because we can't resize BEFORE showing the view.  Otherwise you will see an ugly white box moving up w/ the keyboard
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWasShown:)
                                             name:UIKeyboardDidShowNotification object:nil];



// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{

    CGRect rect = self.frame;
    rect.size.height = 164;
    self.frame = rect;

}
0 голосов
/ 25 ноября 2012

Для меня решение msgambel не сработало. Но подход правильный, я играл с autoresizingMask inputView . Раньше у меня были другие настройки, но правильный способ избежать лишних пробелов над пользовательской клавиатурой:

enter image description here

Я применил это только для внешнего вида.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...