Обнаружение поворота в подклассе UIInputViewController. Расширение клавиатуры

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

-(void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>) coordinator { NSLog(@"Orientation changed"); }

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { NSLog(@"Orientation changed"); }

Я также пытался наблюдать за UIDeviceOrientationDidChangeNotification, но это тоже не работает.

Кто-нибудь знает, как определить вращение в UIInputViewController?


person Guferos    schedule 27.09.2014    source источник
comment
В IOS10 viewWillTransitionToSize запускается в UIInputViewController.   -  person EckhardN    schedule 15.04.2018


Ответы (3)


Вы правы - эти методы не вызываются в подклассе UIInputViewController для расширений клавиатуры (не уверен насчет других типов расширений).

Вам нужно переопределить viewDidLayoutSubviews.

Например, если вы хотите обновить макет подпредставления UICollectionView вашей клавиатуры при повороте устройства, вы должны сделать что-то вроде этого:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    [self.keyboard.collectionView performBatchUpdates:nil completion:nil];
}

В вашем случае вы можете проверить ориентацию устройства в viewDidLayoutSubviews, а затем соответствующим образом применить/изменить ограничения.

person siburb    schedule 03.10.2014

Свифт 4.2

  override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {        
       let screen = UIScreen.main.bounds
        if screen.width < screen.height {
            print("!!! portrait")
        } else {
            print("!!! landspace")
        }
     }
person Ahmadreza    schedule 03.12.2018

Похоже, Apple не предоставила этот метод API для UIInputViewController.

Вы можете определить ориентацию устройства, если ширина устройства больше высоты устройства в viewWillAppear

person nurnachman    schedule 03.10.2014