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 回答
1

斯威夫特 4.2

  override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {        
       let screen = UIScreen.main.bounds
        if screen.width < screen.height {
            print("!!! portrait")
        } else {
            print("!!! landspace")
        }
     }
于 2018-12-03T12:28:58.507 回答
0

看起来 Apple 没有向 UIInputViewController 提供此 API 方法。

如果设备宽度大于设备高度,您可以推断设备方向viewWillAppear

于 2014-10-03T03:37:23.213 回答