如何在iOS 8中检测自定义键盘扩展中的方向更改?

Fir*_*ist 40 ios8 ios-app-extension uiinputviewcontroller custom-keyboard

在自定义键盘扩展中,我们无法使用

`didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation` 
Run Code Online (Sandbox Code Playgroud)

sharedApplication.

我需要在旋转时检测键盘上的纵向或横向.

如何在Custom Keyboard扩展中检测方向更改?

Mat*_*att 41

为了当方向改变,重写来更新您的自定义键盘viewDidLayoutSubviewsUIInputViewController.据我所知,当发生旋转时,总是调用此方法.

此外,由于传统方法[UIApplication sharedApplication] statusBarOrientation]不起作用,要确定当前方向,请使用以下代码段:

if([UIScreen mainScreen].bounds.size.width < [UIScreen mainScreen].bounds.size.height){
    //Keyboard is in Portrait
}
else{
    //Keyboard is in Landscape
}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!

  • 魔术数字......哦,恐怖.不要这样做! (6认同)
  • @iAn旋转到Landscape时,它在我的应用程序中工作. (2认同)
  • 适合我.目前在我的应用中使用它. (2认同)

Alb*_*haw 25

不推荐使用并且适用于任何设备屏幕尺寸(包括未来的屏幕尺寸Apple将在今年发布).



在CustomKeyboard中ViewController.m:

-(void)viewDidLayoutSubviews {
    NSLog(@"%@", (self.view.frame.size.width == ([[UIScreen mainScreen] bounds].size.width*([[UIScreen mainScreen] bounds].size.width<[[UIScreen mainScreen] bounds].size.height))+([[UIScreen mainScreen] bounds].size.height*([[UIScreen mainScreen] bounds].size.width>[[UIScreen mainScreen] bounds].size.height))) ? @"Portrait" : @"Landscape");
}
Run Code Online (Sandbox Code Playgroud)

完成.










或..................

有关此代码的更易于阅读的版本:

-(void)viewDidLayoutSubviews {

    int appExtensionWidth = (int)round(self.view.frame.size.width);

    int possibleScreenWidthValue1 = (int)round([[UIScreen mainScreen] bounds].size.width);
    int possibleScreenWidthValue2 = (int)round([[UIScreen mainScreen] bounds].size.height);

    int screenWidthValue;

    if (possibleScreenWidthValue1 < possibleScreenWidthValue2) {
        screenWidthValue = possibleScreenWidthValue1;
    } else {
        screenWidthValue = possibleScreenWidthValue2;
    }

    if (appExtensionWidth == screenWidthValue) {
        NSLog(@"portrait");
    } else {
        NSLog(@"landscape");
    }
}
Run Code Online (Sandbox Code Playgroud)