UIPageViewController:如何处理视图控制器的不同方向?

Posted

技术标签:

【中文标题】UIPageViewController:如何处理视图控制器的不同方向?【英文标题】:UIPageViewController: how to handle different orientation for view controllers? 【发布时间】:2016-02-22 20:32:32 【问题描述】:

我从 UIPageViewContoller 类继承了 3 个视图控制器。其中两个应该只有纵向方向和一个 - 所有方向。我添加了这样一段代码:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask 
    return self.currentStackVC.supportedInterfaceOrientations()


override func shouldAutorotate() -> Bool 
    return self.currentStackVC.shouldAutorotate()


override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation 
    return self.currentStackVC.preferredInterfaceOrientationForPresentation()


override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) 
    super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)


currentStackVC 是当前可见的视图控制器。 我的视图控制器中也有这样的代码,实现方式略有不同:

前两个视图控制器(下一个 - VC):

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask 
    return UIInterfaceOrientationMask.Portrait


override func shouldAutorotate() -> Bool 
    return false

override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation 
    return UIInterfaceOrientation.Portrait

最后:

override func shouldAutorotate() -> Bool 
    return true


override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask 
    return UIInterfaceOrientationMask.All


override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation 
    return UIInterfaceOrientation.Portrait

当我位于第三个视图控制器上时 - 我旋转了我的设备并应用了新的方向。但不幸的是,它也适用于其他 VC。系统不会在第一个和第二个 VC 中询问 shouldAutorotate()。 (我认为因为每次只问当前的第三个 VC)。我去第二个VC(使用滑动),它也是横向的。所以,我的问题是 - 如何在 Page VC 中为不同的屏幕处理不同的方向?

提前致谢

【问题讨论】:

你解决了吗? 不,我没有。 【参考方案1】:

你应该使用 UIPageViewController 的委托方法

- (UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController *)pageViewController NS_AVAILABLE_ios(7_0) __TVOS_PROHIBITED;

例如把这段代码放到 UIPageViewController 的委托中

- (UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:(UIPageViewController *)pageViewController 
    return [[pageViewController.viewControllers lastObject] supportedInterfaceOrientations];

并覆盖子 VC 中的方法。

VC1

- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskAllButUpsideDown;

VC2

- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
    return UIInterfaceOrientationMaskPortrait;

【讨论】:

对 Objective-C 感到抱歉。我觉得转换成swift很容易 没关系,谢谢,我试试

以上是关于UIPageViewController:如何处理视图控制器的不同方向?的主要内容,如果未能解决你的问题,请参考以下文章

嵌入 UINavigationController 时如何处理 UIView 区域减少的问题

c# FileSystemWatcher如何处理多个文件?

如何处理 MaxUploadSizeExceededException

如何处理 UsernameNotFoundException 春季安全

如何处理c#中的错误代码

Akka 如何处理消息版本?