Возможно ли создать inputAccessoryView над клавиатурой для полной ширины экрана в режиме разделения?

Возможно ли создать inputAccessoryView над клавиатурой для полной ширины экрана в режиме разделения? Система автоматически изменяет размер, чтобы он соответствовал рамке приложения. Это ошибка в iOS?

    Вы можете использовать этот метод, чтобы определить, находится ли ваша клавиатура в режиме разделения. Примечание. Для этого вам нужно UITextField/UITextView с не-nil inputAccessoryView (для этого вы можете просто использовать пустой вид).

     NSArray *classPath = @[ @"KeyboardAutomatic", @"KeyboardImpl", @"KeyboardLayoutStar", @"KBKeyplaneView", @"KBSplitImageView" ]; UIView *splitView = textField.inputAccessoryView.superview; for (NSString *className in classPath) { for (UIView *subview in splitView.subviews) { if ([NSStringFromClass([subview class]) rangeOfString:className].location != NSNotFound) { splitView = subview; break; } } } BOOL isSplit = [splitView.subviews count] > 1; 

    Затем вы можете использовать пользовательский inputAccessoryView и редактировать его CGRectFrame зависимости от того, находится ли клавиатура в режиме разделения или нет. Вот хороший пример: https://github.com/bmancini55/iOSExamples-DockedKeyboardView

    Обмен принятым ответом на тот же вопрос Ссылка

    UIKit публикует UIKeyboardWillShowNotification, когда он показывает клавиатуру, и UIKeyboardWillHideNotification, когда он скрывает клавиатуру. Эти уведомления содержат все необходимое для правильной анимации вашего UITextField.

    Допустим, ваш UITextField находится в свойстве, называемом myTextField.

    Во-первых, вам нужно зарегистрироваться для получения уведомлений. Где вы регистрируетесь, зависит от того, какой объект несет ответственность за перемещение myTextField. В моем проекте надзор за полем отвечает, и, поскольку я загружаю свой пользовательский интерфейс из наконечника, я делаю это в awakeFromNib супервизора:

     - (void)awakeFromNib { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideOrShow:) name:UIKeyboardWillHideNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideOrShow:) name:UIKeyboardWillShowNotification object:nil]; } 

    Если вы используете UIViewController для перемещения поля вокруг, вы, вероятно, захотите сделать это в viewWillAppear: animated :.

    Вы должны отменить регистрацию в своем dealloc или viewWillDisappear: анимированные ::

     - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } 

    Конечно, сложный бит находится в методе keyboardWillHideOrShow:. Сначала я извлекаю параметры анимации из уведомления:

     - (void)keyboardWillHideOrShow:(NSNotification *)note { NSDictionary *userInfo = note.userInfo; NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

    Клавиатура находится в глобальной системе координат. Мне нужно преобразовать фрейм в ту же систему координат, что и myTextField.frame, а myTextField.frame находится в системе координат myTextField.superview:

    CGRect keyboardFrameForTextField = [self.myTextField.superview convertRect : keyboardFrame fromView: nil];

    Затем я вычисляю фрейм, в который хочу, чтобы myTextField переместился. Нижний край нового кадра должен быть равен верхнему краю рамки клавиатуры:

     CGRect newTextFieldFrame = self.myTextField.frame; newTextFieldFrame.origin.y = keyboardFrameForTextField.origin.y - newTextFieldFrame.size.height; 

    Наконец, я анимацию myTextField для его нового фрейма, используя те же параметры анимации, что и клавиатура:

      [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{ self.myTextField.frame = newTextFieldFrame; } completion:nil]; } 

    Здесь все собрано:

     - (void)keyboardWillHideOrShow:(NSNotification *)note { NSDictionary *userInfo = note.userInfo; NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]; CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect keyboardFrameForTextField = [self.myTextField.superview convertRect:keyboardFrame fromView:nil]; CGRect newTextFieldFrame = self.myTextField.frame; newTextFieldFrame.origin.y = keyboardFrameForTextField.origin.y - newTextFieldFrame.size.height; [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{ self.myTextField.frame = newTextFieldFrame; } completion:nil]; } 
    Interesting Posts

    Изменить оттенок панели навигации контроллера

    Swift: выполнить функцию на ViewController после отклонения модального

    Лучший способ установить сохраненное свойство для вновь созданного объекта

    Как создать собственный сигнал в ReactiveCocoa 4?

    Шаблон проектирования для управления состоянием пользовательского интерфейса в iOS

    Как уменьшить скорость вращения изображения с помощью трюка на UIView?

    Как воспроизводить видео с YouTube, metacafe и т. Д. В родном приложении iphone?

    Xcode 8 Предупреждение категории Objective-C

    Как я могу решить SIGSEGV с криттеризмом

    Xcode 6.2 – Ожидаемый тип после 'as'

    UITableViewCell пользовательское редактирование

    Apple PushKit didUpdatePushCredentials никогда не вызывается в iOS 9+

    Как записывать несколько дорожек с помощью AVFoundation?

    Приложение Orcale MAF iOS отклонено Apple – сетевая совместимость с IPV6

    Преобразование значения String из UILabel в Int возвращает nil | Swift 2 / Xcode 7

    Давайте будем гением компьютера.