检测UIInputViewController子类中的旋转。键盘扩展

时间:2014-09-27 21:56:34

标签: ios objective-c ios8 uideviceorientation ios8-extension

我一直在开发自定义键盘扩展,我需要在设备旋转后以编程方式更新一些约束。我一直在尝试检测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中的轮换?

3 个答案:

答案 0 :(得分:1)

您正确 - 在键盘扩展的UIInputViewController子类中未调用这些方法(不确定其他扩展类型)。

您需要覆盖viewDidLayoutSubviews

例如,如果您想在设备旋转时更新键盘的UICollectionView子视图的布局,您可以执行以下操作:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

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

在您的情况下,您可以在viewDidLayoutSubviews中检查设备的方向,然后适当地应用/修改约束。

答案 1 :(得分:0)

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

如果设备宽度大于viewWillAppear

中的设备高度,则可以推断设备方向

答案 2 :(得分:0)

Swift 4.2

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