在 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 问题

如何在 iPad 上的 iOS 7 上的 UITableView 单元格右侧绘制图像?

Ipad上的Iphone分辨率

iPad 上的导航控制器

iPad 上的 CSS 灵活框布局