【问题标题】:iPhone autorotation only on specific screens in under a navigation controlleriPhone 仅在导航控制器下的特定屏幕上自动旋转
【发布时间】:2024-01-12 00:42:01
【问题描述】:

这只是我遇到的基本问题的一个例子,所以如果这种情况听起来有点毫无意义,请不要担心;)

假设我有一个主要是 UINavigationController 的应用程序,只有两层深。顶层是一个包含图像文件名列表的表格,第二层只有一个 UIImageView 显示您点击的文件名的图像。

对于这样的应用程序,有没有人知道一种让顶层表格自动旋转同时保持第二层图像固定在纵向模式的好方法?

到目前为止,我几乎可以到达那里...但是当我在横向模式下点击文件名时,即使第二级视图控制器的 shouldAutorotateToInterfaceOrientation 仅针对纵向返回 yes,图像也会以错误的方向滑入视图模式。

【问题讨论】:

  • 您是否需要将 NavigationBar 旋转并置于顶部以供第一个控制器查看?

标签: iphone uinavigationcontroller rotation


【解决方案1】:

在 iPhone OS 2.x 中没有很好的方法来做到这一点,但在 3.0 中,他们已经大大改进了它。

在 2.x 中,shouldAutorotateToInterfaceOrientation: 委托方法仅适用于更改方向,所以你会得到你描述的行为:如果它在另一个视图控制器中旋转,它即使新的视图控制器不支持旋转到该方向,也会通过推送和弹出保持旋转。

在 3.0 中,UINavigationController 会在每次推送或弹出时轮询 shouldAutorotateToInterfaceOrientation:,并按照您期望的方式返回,例如:如果您当前以横向左方向旋转,并且您推送视图控制器的实例仅通过shouldAutorotateToInterfaceOrientation: 支持纵向方向,它会自动立即翻转逻辑方向并以纵向方向以正确的方式在新视图中滑动。

请注意,这仅适用于链接到(因此需要)3.0 的应用程序。对于链接到 2.x 的应用程序,它将模拟旧行为。

【讨论】:

  • 这听起来正是我正在寻找的行为。既然我有了新的 SDK,我将不得不再试一次。谢谢!
【解决方案2】:

问题是,如果你使用自动旋转,整个 UI(包括我相信的 UIWindow 实例)都会被旋转。

此时推送到导航控制器的任何操作都将以横向方式完成。

所以当你推送 imageview 时,这正是你得到的。

要使其正常工作,您必须:

  1. 处理根视图的旋转 手动(使用转换)
  2. 通过 -PI/2 取消旋转图像视图 使用转换。

无论哪种方式,您都必须手动执行转换才能使其正常工作。

附带说明,这可能是糟糕的 UI 设计。作为用户,我希望当我向下钻取图像时,图像会正面朝上。但这是在不知道您的应用的确切上下文的情况下进行的。

【讨论】:

  • 这在 iPhone OS 3.0 中不再适用。请参阅下面的答案。
最近更新 更多