Возможно ли создать 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

    Что такое предпочтение «Настройка» в WatchKit-Storyboard?

    Получить сегодняшнее фото с альбома в IOS

    InApp Купить совместимость контента на нескольких мобильных платформах (iOS и Android).

    Добавить UICollectionView в UICollectionViewCell

    iOS Cordova: Создает ли Cordova несколько экземпляров плагина object-C при вызове более одного раза?

    Где разместить файл .xib внутри проекта рамки?

    Как установить частоту дискретизации аудио на AVCaptureSession?

    Следующая кнопка, например, кнопка «Навигация»

    Можем ли мы открыть контакты на продлении часов

    Нарисуйте строку с помощью UIBezierPath

    Предупреждение Клана: значение, сохраненное в «пуле» во время его инициализации, никогда не читается

    Должен ли проект быть создан как комплект спрайтов или может быть добавлена ​​структура?

    Как вычислить ширину UILabel на основе длины текста?

    Рисование нескольких строк с использованием диаграмм iOS

    Предупреждение Mach-O Linker: слишком много индивидуальных процедур для компактного разговора

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