强制UIViewController仅以横向模式显示

11
我的应用程序以纵向模式运行,但是我想只在一个屏幕上显示横向模式,因为它是一张图表。我需要添加什么到我的UIViewController中,才能强制将其设置为仅限横向模式?

尝试在iOS 7上使用以下代码:https://dev59.com/T33aa4cB1Zd3GeqPhcDg#22491787 - Fede Cugliandolo
3个回答

14
很抱歉,我的回答会很简短:如果您正在使用UINavigationController,则无法这样做。因此,@jer给出的答案是不正确的。Apple文档中指出:

UITabBarController或UINavigationController中所有子视图控制器都没有统一的方向设置。

我最近在一个赏金网站上得到了这个问题的答案,并且在这个过程中我的应用被拒绝了。在这里可以阅读相关内容:如何将自动旋转限制为某些视图的单个方向,同时允许其他视图的所有方向? 您唯一的解决方案是放弃UINavigationController并使用自己的东西重写它。

啊,谢谢,那就是UINavigationController的问题了。感谢提供链接,我会去看一下的。 - lps
2
为了明确起见,之前没有提到导航控制器,而且我也不是心理读者。你的陈述暗示着这是在我回答时已知的信息,但事实并非如此。 - jer
抱歉@jer,我没有恶意攻击你,也没有投反对票或做任何事情。我在这个问题上经历了非常艰苦的斗争,许多人提出了不同的shouldAutorotateToInterfaceOrientation:实现的相同答案。苹果公司的实现方式毫无意义,这就是为什么即使是看似简单的问题,找到解决方案也更加困难的原因。干杯,EP。 - epologee
1
我在这个问题上苦苦思索,结果只是一个简单的疏忽。谢谢! - Leachy Peachy
我过去几天一直尝试不同的shouldAutorotateToInterfaceOrientation:实现来完成这件事情!现在才看到了你的回答。看来我得将xib文件和storyboards一起包含进来。 - Isuru
显示剩余2条评论

3
通过以模态的形式呈现和关闭视图控制器,您可以强制设定方向。将动画设置为“NO”,即可在用户没有意识到的情况下实现此操作。
您可以阅读Josh在Is there a documented way to set the iPhone orientation?上的答案,了解更多信息。
我认为这有点像黑客行为,但我已经成功地使用这个前提来强制任何设备方向。

2

您需要实现shouldAutorotateToInterfaceOrientation:方法,并且在该方法中仅当UIInterfaceOrientationIsLandscape(param)返回YES时,返回YES,其中param是您声明的参数。

这将支持左横屏和右横屏,而不是将您锁定为一个横屏方向。


我尝试过了,但它仍然显示为竖屏。我添加了以下代码:-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); } - lps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接