【发布时间】:2015-09-20 14:48:09
【问题描述】:
在我的 iPhone 应用程序中,我有一个只想以纵向模式显示的视图。导航到该视图时,它应自动以纵向视图显示。导航离开时,方向应该变回原来的样子,或者,如果设备方向发生了变化,则适应它。我可以找到有关强制定向和防止自动旋转的信息。我找不到任何关于离开该视图后如何更改回正确方向的信息。
所以我的想法是
- 保存初始方向(存储在
currentOrientation) - 订阅方向更改事件以在内容锁定为纵向时跟踪方向更改(更新
currentOrientation) - 离开视图时,使用
currentOrientation值恢复正确的方向。
编辑(现已删除代码):除了无法正常工作之外,这是一种危险的做法,因为它大量使用了不受支持的 API。
编辑:
我相信这个问题现在可以归结为以下几点:
是否有文档化的、受支持的方式来强制界面方向独立于设备方向?
setValue(UIInterfaceOrientation.Portrait.rawValue, forKey: "orientation")已在 SO 和其他地方多次推荐,但它确实似乎是不受支持的黑客攻击。是否有文档化的、受支持的方法来将界面方向更新为设备方向?这将需要在另一个视图中从强制界面方向“恢复”,而无需通过来回转动设备来触发自动旋转。
支持supportedInterfaceOrientations() 和shouldAutorotate()。但是这些只会在设备转到该位置后锁定 interfaceOrientation。它们不能防止错误的初始方向。
类似这个问题的问题很多,说明这个问题设置并不少见,但目前使用支持的方法还没有令人满意的完整解决方案。
【问题讨论】:
-
您为设置方向所做的操作未记录在案且不受支持。为这一视图添加横向支持可能比尝试控制旋转更容易。
-
理想情况下,系统会在离开方向锁定视图后处理正确的方向,但它不会。有没有更简单的方法来实现这一点?创建该视图的横向版本不是一种选择。
-
您应该删除
setValue(… forKey: "orientation")位,因为它没有被记录和支持。您应该能够使用supportedInterfaceOrientations()、shouldAutorotate()和attemptRotationToDeviceOrientation()实现您想要的。 -
只是好奇(不要争论) - 为什么不创建视图的横向版本?我对您正在开发的用户体验感兴趣。
-
谢谢,Aaron,我会多尝试一下,并尝试使用支持的接口提出一个更简单的解决方案。是的,不去景观是一个设计决定。这是一个跨平台应用程序,在 Windows 和 Android 中启动,该视图分别是中心页面或视图寻呼机。它有一个全屏背景图像,它几乎是应用程序的核心。即使我设法重新排列所有元素,它在水平视图中也不好看。完全重新设计该视图,例如使用标签时,我觉得该应用会丢失其(品牌)ID。
标签: ios swift uiinterfaceorientation uideviceorientation