1

私はカスタム キーボード拡張機能を開発しており、デバイスの回転後にいくつかの制約をプログラムで更新する必要があります。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か?

4

3 に答える 3

1

その通りです。これらのメソッドは、キーボード拡張機能の UIInputViewController サブクラスでは呼び出されません (他の拡張タイプについてはわかりません)。

オーバーライドする必要がありますviewDidLayoutSubviews

たとえば、デバイスが回転したときにキーボードの UICollectionView サブビューのレイアウトを更新する場合は、次のようにします。

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

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

あなたの場合、viewDidLayoutSubviewsでデバイスの向きを確認してから、制約を適切に適用/変更できます。

于 2014-10-03T03:37:32.220 に答える
0

Apple はこの API メソッドを UIInputViewController に提供していないようです。

デバイスの幅がデバイスの高さよりも大きい場合、デバイスの向きを推測できます。viewWillAppear

于 2014-10-03T03:37:23.213 に答える