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

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

    2 Solutions collect form web for “Возможно ли создать inputAccessoryView над клавиатурой для полной ширины экрана в режиме разделения?”

    Вы можете использовать этот метод, чтобы определить, находится ли ваша клавиатура в режиме разделения. Примечание. Для этого вам нужно 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

    FirebasePerformance Crash на iOS

    повторное видео с использованием UIImagePickerController

    Контент исчезает за долю секунды при загрузке автономного веб-приложения

    iOS: основные изображения и многопоточные приложения

    Внедрение UIScrollView программно

    CGGradientCreateWithColors возвращает нулевой указатель

    AVPlayer вызывает сбой при обновлении слайдера прогресса с ошибкой Assertion в –

    Генерация штрих-кода из приложения iOS

    UIWebview показывает пустой белый экран даже после загрузки URL-адреса

    В iOS7 можно ли добавить в систему пользовательскую клавиатуру? Или это все еще песочница?

    iOS 7 Chrome – фиксированный позиционный ящик не остается внизу, когда всплывает виртуальная клавиатура

    Многократный ограничитель количества SMS WatchKit

    Можно ли отменить блок, добавленный в NSOperationQueue, с помощью addOperationWithBlock :?

    Предупреждение. Новая версия SDK Google Maps для iOS – Как обновить?

    Как получить контроллер верхнего уровня, когда представлен UIImagePickerController?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.