在 iPad 上的 UIPageViewController 中强制使用纵向模式
Posted
技术标签:
【中文标题】在 iPad 上的 UIPageViewController 中强制使用纵向模式【英文标题】:Forcing Portrait Mode in a UIPageViewController on iPad 【发布时间】:2014-11-07 15:17:21 【问题描述】:我有一个 iPad 应用程序,它在整个应用程序中支持纵向和横向。这是一个 ios 7 和 iOS 8 版本的应用程序。
该应用程序是一个UITableViewController
,具有多个转义到一组不同的UIViewControllers
。我在应用程序中有一个选项可以再次显示教程,并且我只在纵向模式下创建了图像,因为它没有太多意义(或者在横向中看起来不错)。
考虑到这一点,本教程采用图片的形式加载到UIPageViewController
。图片在viewDidLoad
中加载,按钮和布局非常好用。
问题
我想将UIPageViewController
限制为仅纵向。
目前,我有:
- (void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
这在某种程度上有效。如果设备处于横向模式并且调用了教程,它会将其旋转为纵向。
但是,如果设备是纵向的,并且我在调用教程后将其旋转为横向,那么教程就会旋转。
在我的自定义 UIPageViewController
类中,我究竟如何防止此视图旋转,以使其无论是在教程的开始、中间还是结束时都不会旋转到横向。
对此的任何指导将不胜感激。
【问题讨论】:
【参考方案1】:查看 UIViewController 文档以获取方向支持,特别是 shouldAutorotate:
和 supportedInterfaceOrientations
- https://developer.apple.com/library/ios/DOCUMENTATION/UIKit/Reference/UIViewController_Class/index.html#//apple_ref/occ/instm/UIViewController/supportedInterfaceOrientations
我的第一个猜测是你会想要像现在这样设置值,然后在你的自定义 UIPageViewController 子类中覆盖 shouldAutorotate
并返回 NO。
但是,请注意,您可能会在 HIG 合规性审核过程中受到打击,因为您的应用声称支持所有方向,但部分应用不支持。显然,这完全取决于审阅者,以及他们是否像许多其他应用程序那样捕捉到它。
【讨论】:
非常感谢马特 - 这真的很有帮助,并且很好地考虑了可能的拒绝。将 shouldAutorotate 设置为 no,它适用于我的应用程序以纵向模式开始,但是如果教程以横向开始,它不会旋转到纵向(可以理解)。所以考虑制作一个横向教程,我可以轻松确定我所在的方向并显示合适的图像吗?那么在viewDidLoad中加载所有图片,然后实时检测方向并调整图片? (如果它不仅仅是一个简单的方法,也许需要一个不同的问题?) 我通常使用 UIApplication 的 statusBarOrientation 属性 - 但根据这个答案 (***.com/a/2738815/490180) 有几种不同的方法可以做到这一点,并且在所有情况下都不能保证 100%。 太棒了 - 非常感谢马特,您关于可能被拒绝的建议非常棒。老实说,即使它没有被拒绝,它也是一种廉价的实现方式,如果你在 Landscape 中使用该应用程序,最终它会是一个奇怪的 UI。想想看,我不会对应用程序中的它感到满意,所以我也没有理由使用它。再次感谢马特。以上是关于在 iPad 上的 UIPageViewController 中强制使用纵向模式的主要内容,如果未能解决你的问题,请参考以下文章
即使 iPad 处于纵向模式,如何强制 iPad 上的电视处于横向模式
iPad 上的 MPMoviePlayerController 问题