Отключить вращение пользовательской клавиатуры в ios

Я создаю пользовательскую клавиатуру и не хочу поддерживать ландшафтный режим. Таким образом, если пользователь поворачивает устройство в ландшафтный режим, клавиатура должна оставаться в портретном режиме. Я пробовал следующие методы:

-(BOOL)shouldAutorotate {
    return NO;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

и

-(void)viewDidLoad{
 NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPotrait];
 [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}

Но ни один из способов не работает. Единственный метод срабатывает при вращении устройства:

-(void)viewWillTransitionToSize:(CGSize)size
      withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

Здесь я получаю текущий размер представления после поворота. Но как остановить вращение? Любая помощь будет оценена.


comment
Это то, что вы ищете: stackoverflow. com/questions/6941849/   -  person Ariel    schedule 26.07.2016
comment
@Ариэль: я уже пробовал это. Не работает.   -  person Poles    schedule 26.07.2016
comment
Я также делаю собственную клавиатуру и использую автоматические раскладки для поддержания портретного и ландшафтного режимов. У меня такой же случай как у вас. Вы используете автоматические макеты или отключили автоматический макет на данный момент?   -  person Ariel    schedule 26.07.2016
comment
Я использую автомакет, но у меня нет поддержки ландшафтного режима. Я хочу, чтобы та же клавиатура портретного режима открывалась и для ландшафтного режима.   -  person Poles    schedule 26.07.2016
comment
Моя клавиатура тоже использует автораскладку. Вы замечаете 4-5-секундную задержку при загрузке клавиатуры на устройстве? Я замечаю задержку на 4-5 секунд на моей клавиатуре. А насчет твоего дела, друг. Боюсь, у меня был плохой опыт работы с портретными клавиатурами. Клавиатуры, поддерживающие портретную ориентацию, имели проблемы с раскладкой только при переключении в ландшафтный режим. Кажется, пользовательская клавиатура должна соответствовать раскладке приложения, которое в первую очередь запрашивало клавиатуру.   -  person Ariel    schedule 27.07.2016
comment
@Ariel: да, у меня 4-5-секундная задержка на клавиатуре.   -  person Poles    schedule 27.07.2016
comment
Пожалуйста, запустите проект в режиме выпуска и установите его на устройство, а не на симулятор. И, скажите, у вас все же есть отсрочка или нет? Это может вызвать у вас часы неприятностей, как у меня. Если вам нужны инструкции, я могу помочь вам в этом!   -  person Ariel    schedule 27.07.2016


Ответы (2)


Если вы создаете пользовательскую клавиатуру для своего приложения, она должна быть управляемой.

В идеале ориентация наследуется от последнего иерархического или текущего видимого контроллера представления приложения.

Но если вы создаете стороннее приложение клавиатуры, то пользовательская клавиатура — это своего рода приложение, наложенное на другое приложение, где ориентация все еще наследуется от приложения, которое в данный момент находится в окне клавиатуры. Я думаю, что пользовательская клавиатура не может быть ограничена определенной ориентацией, чтобы пользователь чувствовал себя комфортно при использовании всех приложений с этой пользовательской клавиатурой.

person RamaKrishna Chunduri    schedule 26.07.2016

Не могли бы вы попробовать то же самое на viewDidAppear

-(void)viewDidAppear:(BOOL)animated{
   NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPotrait];
 [[UIDevice currentDevice] setValue:value forKey:@"orientation"];
} 
person Nattudurai    schedule 26.07.2016
comment
Я пробовал, но он не работает для пользовательского контроллера просмотра клавиатуры. - person Poles; 26.07.2016