键盘在ios中显示方向错误

时间:2016-11-07 13:35:51

标签: ios objective-c xamarin xamarin.ios uikeyboard

我在应用程序中有一个viewcontroller,支持横向和纵向方向。

点击按钮,会出现一个弹出窗口,我应该输入名称。一切都在肖像模式下工作。

enter image description here

但如果我关闭键盘,向左或向右旋转设备然后打开弹出窗口,键盘仍然以纵向模式打开。

enter image description here

shouldAutorotate返回true并supportedInterfaceOrientationsAllButUpsideDown中返回viewcontroller,因此轮播会自动发生。

我尝试了thisthis选项,但都没有。

任何想法该怎么做?

4 个答案:

答案 0 :(得分:2)

在我放弃对iOS 8的支持并将部署目标提升到iOS 9之后,我最近在一些视图控制器中得到了完全相同的错误键盘方向。事实证明,我以前的一位同事使用了{{3}当基本SDK是iOS 9时我们解决了一个老问题(我们现在在10中,而在从Xcode 9 beta编码时是11)。该解决方案(基本上覆盖UIAlertController的supportedInterfaceOrientations仅允许纵向)将强制使用较新的SDK +部署目标呈现键盘,即使应用程序窗口和警报本身处于横向状态。

删除该覆盖可以解决问题,而且我没有看到警报超过警报的任何问题。

答案 1 :(得分:0)

尝试将以下代码添加到viewcontroller的viewDidAppear方法

 - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        [[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"];
        [[UIDevice currentDevice] setValue:@(self.interfaceOrientation) forKey:@"orientation"];

    }

答案 2 :(得分:0)

好的,修好了,我猜错了。

似乎Keyboard和UIViewController分别调用supportedInterfaceOrientations并根据其返回值进行旋转。我在那里有一个if-else语句,只在某些情况下返回AllButUpsideDown。当键盘检查是否应该旋转方法返回Portrait时,viewcontroller值为AllButUpsideDown

所以我改变了这个:

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        if (someStatement)
        {
            return UIInterfaceOrientationMask.AllButUpsideDown;
        }
        return UIInterfaceOrientationMask.Portrait;
    }

对此:

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        return UIInterfaceOrientationMask.AllButUpsideDown;
    }

现在只有ShouldAutoRotate决定是否应该轮换。

对某些人来说,它应该是这样的:

public override bool ShouldAutorotate()
    {
        if (someStatement)
        {
            return true;
        }
        return false;
    }

    public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations()
    {
        return UIInterfaceOrientationMask.AllButUpsideDown;
    }

答案 3 :(得分:-1)

创建UIAlertController的子类

let integers = (1...100).map { _ in Int.random(in: 0..<100) }