我在应用程序中有一个viewcontroller
,支持横向和纵向方向。
点击按钮,会出现一个弹出窗口,我应该输入名称。一切都在肖像模式下工作。
但如果我关闭键盘,向左或向右旋转设备然后打开弹出窗口,键盘仍然以纵向模式打开。
我shouldAutorotate
返回true并supportedInterfaceOrientations
在AllButUpsideDown
中返回viewcontroller
,因此轮播会自动发生。
任何想法该怎么做?
答案 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) }