gpt4 book ai didi

objective-c - iPad 上的多个呈现 View Controller 和旋转

转载 作者:可可西里 更新时间:2023-11-01 03:35:13 24 4
gpt4 key购买 nike

我最近在将一些代码从 iPhone 应用程序移植到 iPad 时遇到了问题。可能与描述的问题有关 here ,尽管我发现该问题的解释/解决方案并不令人满意。场景是这样的:

  1. View Controller “A”( Root View Controller )使用“Form Sheet”模态呈现样式呈现一个模态视图 Controller (称之为“B”)。

  2. View Controller B 以“全屏”模式呈现样式呈现 View Controller “C”。

  3. iPad 旋转,而 View Controller C 是最顶部呈现的 View Controller 。

  4. 关闭 C 后,B 会重新显示,但方向不正确。

据我所知,链接多个呈现的 View Controller 应该没有问题——事实上,Presenting View Controllers from Other View Controllers 明确支持这种行为。文档。我还在 iOS 5 Release Notes 中阅读了以下声明:

Rotation callbacks in iOS 5 are not applied to view controllers that are presented over a full screen. What this means is that if your code presents a view controller over another view controller, and then the user subsequently rotates the device to a different orientation, upon dismissal, the underlying controller (i.e. presenting controller) will not receive any rotation callbacks. Note however that the presenting controller will receive a viewWillLayoutSubviews call when it is redisplayed, and the interfaceOrientation property can be queried from this method and used to lay out the controller correctly.

据我所知,这并没有发生—— View Controller B 收到对 -shouldAutoRotateToInterfaceOrientation 的调用,但此调用中的 interfaceOrientation 参数值是 View Controller B 在呈现 View Controller C 时的界面方向值,不是 C 在解雇时的接口(interface)方向的值(value)。因为我们在 iPad 上,所以所有这些 View Controller 都在 -shouldAutoRotateToInterfaceOrientation 中返回 YES。因此 B 的 View 的边界永远不会改变,所以 -willLayoutSubviews 永远不会被调用。

我已经尝试在 B 关闭之前将 View Controller C 的方向保存在 B 的回调中,然后在下次调用 -shouldAutoRotateToInterfaceOrientation 时使用该信息,并在关闭时仅针对 C 的方向返回 YES。这修复了在没有进行此检查的情况下出现的损坏的 UI,但是 View Controller B 没有将其界面方向更新为该值,因此后续的模态演示将从设备的错误一侧进/出动画。

有没有人能够成功地获得像这样工作的 View Controller 配置?这似乎不是一个不寻常的场景,所以我有点惊讶它没有像我最初预期的那样工作。

提前致谢。

最佳答案

在我看来,如果您不使用导航 Controller ,多个链接的模态视图 Controller 会导致令人困惑和恼人的用户体验。我认为 View controller B 应该在导航 Controller 中(如果你不想,你不必显示导航栏)。

模态呈现实际上应该用于单个死胡同的实体(单个 View Controller 或包含多个 subview Controller 的导航 Controller )。

出于兴趣,你是说这在 iPhone 上工作正常但在 iPad 上不行吗?还是您不允许在 iPhone 版本上旋转?

我还找到了 this thread这表示从 Root View Controller 呈现模态视图 Controller 可能会有所帮助。

关于objective-c - iPad 上的多个呈现 View Controller 和旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com