【发布时间】:2010-11-01 12:17:46
【问题描述】:
我有一个 UIViewController,它在 shouldAutorotateToInterfaceOrientation: 中返回 YES 为 UIDeviceOrientationPortrait 和 NO 为其他所有内容。使用堆栈顶部的视图,我使用pushViewController:animated: 推送一个新的UIViewController。对于shouldAutorotateToInterfaceOrientation: 中的任何内容,新控制器都会返回YES。
第一个视图拒绝旋转(如预期的那样)。推送第二个视图后,用户可以旋转设备,并且 UI 将旋转(也如预期的那样)。如果第二个视图处于横向模式并且用户按下返回按钮(调用popViewControllerAnimated:),第一个视图将显示为旋转(unexpected!)。
如果用户将设备旋转回纵向,则视图将旋转,然后像以前一样停留在纵向模式。这可行,但在用户旋转回来之前,这对用户来说很难看。所以我正在寻找一种方法让这个视图保持纵向模式。
到目前为止,我发现的唯一解决方法是使用-[UIDevice setOrientation:],它会引发警告(orientation 是只读的),但因为它是实际定义的,所以可以工作。这是一个巨大的黑客,我想要一个真正的解决方案。为了寻找真正的解决方案,我将 GDB 附加到照片应用程序 (MobileSlideshow.app) 并发现它也使用了-[UIDevice setOrientation:]。作为一个内部应用程序,虽然我猜他们有不同的规则。
是否有正确的方法来实现预期的自转行为?
【问题讨论】:
-
我相信在应用商店中有(大概)使用 setOrientation 的应用示例。一个是 Tweetie,它可以在写推文时强制使用横向键盘。也许他们侥幸逃脱,因为这不是默认设置。
-
现在是 2014 年,这个问题仍然出现在 ios 8 上。有没有人找到这个问题的真正答案,看起来不像是黑客?
标签: iphone cocoa-touch uinavigationcontroller rotation