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