iphone - iphone 和 ipad 之间 modalviewcontroller 的不同方向行为

标签 iphone objective-c ios cocoa-touch

在试图理解 iOS 中的这种特殊行为时,我已经完全迷失了方向。 14 小时后,阅读了无数 Stack Overflow 问题,并仔细阅读了所有相关的 Apple 文档,我仍然很困惑——所以我希望一个具体的例子能帮助专家向我解释。

我有一个正在展示的模态视图 Controller (此问题行为适用于任何 Apple 的预制模态视图 Controller ,似乎无关紧要。)

用最简单的话来说,我将设备旋转到横向。如果我打电话:

[rootViewController presentModalViewController:modalVC animated:YES];

在 iPhone 上,它按预期显示。 在 iPad 上,它也按预期显示(包含为背景为灰色的页面)

稍后,在 modalVC 的内置“完成”按钮的委托(delegate)中,我调用:

[rootViewController dissmissModalViewControllerAnimated: YES];

这是症状开始的地方:

在 iPhone 上,不管 rootViewController 的 shouldAutoRotateToInterfaceOrientation 返回 YES 还是 NO,状态栏立即进入纵向;模态框然后以错误的方向(纵向,向右)滑出,并且底层的 rootViewController 现在以纵向显示,而没有查询其 shouldAutoRotate。

在 iPad 上,我得到了预期的行为——模态按预期被取消,方向保持按预期。

我在这里不明白什么?我已经尝试了很多东西,包括重写 modalViewController 的 shouldAUtoRotate 行为,以及使用各种容器 viewController。唯一有效的解决方案是创建一个 stub UIViewController,将其 View 附加到 keyWindow,然后在其中呈现模式。虽然这解决了问题,但许多 Apple 和站外文章都声明这是不正确的(有充分的理由,因为它阻止了正确的事件传播到达该 stub UIViewController。)

最佳答案

在此向各位致歉。与这些类型的事情一样,它的开发者(我)错误。我会发布发生的情况,以防其他人到达这里。

这适用于在第三方应用程序中实现的静态库。 (在本例中为 Flash)我没有源代码。一些深入的调试揭示了我猜应该很明显的东西——使用我的库的第三方应用程序在其自己的 shouldAutoRotate 函数中进行了一些有问题的计算,并在某些条件下为 -any- toInterfaceOrientation 参数返回 NO(不正确。)

关于iphone - iphone 和 ipad 之间 modalviewcontroller 的不同方向行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8538500/

相关文章:

iphone - ASIHTTPRequest 假人

iphone - 用 iPhone 覆盖@media CSS

ios - 如何使用 MonoTouch 在 iOS 中的 post 请求中发送表单数据?

ios - 如何在 Swift 中检测图像中的条形码?

ios - 未调用重大更改位置委托(delegate)方法

iphone - 如何跳转到特定 View ?

ios - 当我设置自定义注释 View 的框架时, View 消失,直到捏 map

ios - Facebook 帐户套件 用于测试的手机号码

iphone - 在 JavaScript 中检测 iPhone Xr 和 iPhone Xs

ios - 获取从当前位置到达某个地方的时间