【发布时间】:2023-10-09 21:25:01
【问题描述】:
我需要知道是否有办法告诉 iOS7 设备在不旋转设备的情况下设置视图方向。代码中的某种方式触发设备调用代码,告诉它以哪种方式显示视图。
如果设备处于横向并在发生某些更改时保持横向,我想强制更改以纵向显示视图,此时用户需要转动设备才能正确查看.我会在下面解释原因
查看我的应用程序可能会使我的描述更清晰 - it is free to download
我有许多视图控制器(嵌入在 navigationControllers 中),只有其中一个需要旋转到横向,然后仅在特定条件下。
* 上的解决方案似乎是在 UINavigationController 上创建一个类别,为其提供 shouldAutorotate 和 supportedInterfaceOrientations 方法,然后在各个 viewControllers 中使用这些方法来阻止或允许旋转。
这对我有用....但是
在我希望旋转的一个视图控制器上,我不希望它一直旋转。
这个视图控制器是diveSiteDetailsController,(如果你已经下载了应用程序,你需要在第一页选择潜水地点然后点击'+'来查看它)。它有一个 UISegmentedController 和 4 个子视图(3 个表视图和 1 个其他 UIView)。 App Store 上的当前版本工作正常,现在我已经解决了这个问题 - 但查看它可能会帮助您更好地理解我的问题)。
在diveSiteDetailViewController 上,UISegmentedController 用于在4 个子视图之间切换。
所有子视图都用于输入有关同一潜水地点的数据,但由于有很多潜在数据,我将其分解为逻辑卡盘,每个卡盘都是一个子视图 - 位置、数据(深度、水流、能见度) ,环境类型和注释。
每个子视图的 .hidden 属性用于使它们出现和消失。
我只希望第二个子视图旋转(数据视图 - 它上面有一些滑块,如果在横向上更容易使用)。
限制这种旋转很容易 - 我是这样实现的
- (NSUInteger)supportedInterfaceOrientations{
if (self.dsDataRangeSlidingTV.hidden) {
return UIInterfaceOrientationMaskPortrait;
}
return UIInterfaceOrientationMaskAllButUpsideDown;
}
现在视图只会在显示数据表视图时旋转为横向。
但是,一旦在横向中,如果我使用 UISegmentedController 选择了不同的子视图,那么它们显然也会以横向显示,因为 iOS 设备还没有进行旋转。这是我试图避免的情况。
旋转 iOS 设备将按预期将这些视图返回到纵向,但是当我使用 UISegmentedController 从数据子视图切换到另一个子视图时,我需要触发设备以重新评估其显示,并且它触发了我没有知道该怎么做。
任何建议都非常受欢迎。
【问题讨论】:
标签: ios7 uiinterfaceorientation