为什么UIActionSheet在UIInterfaceOrientationPortraitUpsideDown中显示为颠倒?

时间:2015-03-23 01:15:24

标签: ios objective-c ios8 uiactionsheet

我知道在iOS 8中不推荐使用UIActionSheet,但我仍然需要API,因为我仍在使用iOS 7。

所以这就是问题所在:我的应用支持手机设备UIInterfaceOrientationPortraitUIInterfaceOrientationPortraitUpsideDown。当我的应用以正常纵向方向显示UIActionSheet时,一切都很好。但是,如果将设备倒置,则操作表也会颠倒显示,如下所示:

screenshot

只有当应用程序在iOS 8的设备(或模拟器)上运行时才会出现问题。当应用程序在iOS 7.1的模拟器中运行时,问题就消失了(我还没有真正的设备iOS 7.1进行测试)。当我的应用程序仍然使用iOS 8之前的SDK构建时,即使应用程序在iOS 8设备上运行,也不会出现问题。

有没有人建议我在这里做错了什么?请参阅下面的代码段,以获取重现问题的最小示例。我使用Xcode 6.1.1和iOS SDK 8.1进行编码。我保证我没有以任何方式摆弄Xcode应用程序包: - )


重现问题的步骤

  1. 使用“单一视图应用程序”模板
  2. 创建一个新的Xcode项目
  3. 选择主目标,然后在“常规”标签上确保选中“颠倒”设备方向
  4. 打开主故事板
  5. 将名为doIt:的方法添加到第一个响应者
  6. 在视图中添加新的UIButton,并将按钮的“Touch Up Inside”事件连接到方法
  7. 最后,将以下代码添加到ViewController.m

    - (void) doIt:(id)sender
    {
      UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"sheet title"
                                                               delegate:self
                                                      cancelButtonTitle:nil
                                                 destructiveButtonTitle:nil
                                                      otherButtonTitles:nil];
      [actionSheet addButtonWithTitle:@"sheet action"];
      [actionSheet showInView:self.view];
    }
    
    // This override is required so that interface orientation
    // to UIInterfaceOrientationPortraitUpsideDown is possible
    - (NSUInteger) supportedInterfaceOrientations
    {
      return UIInterfaceOrientationMaskAll;
    }
    

    运行应用程序,旋转并点按按钮,您应该看到我的意思。

1 个答案:

答案 0 :(得分:1)

在ios 8中,我认为你最好使用UIAlertController。处理这个奇怪的案子会更好。