PageViewController在旋转时崩溃

时间:2016-03-13 11:23:22

标签: ios

嗨我有一个带有一些viewcontrollers的pageViewcontroller。有一个空白控制器,里面有一个标签

问题是当我尝试旋转它时它会崩溃

这是代码

class FAPageViewController: UIPageViewController , UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pages = ["one", "two"]

var pageViewController = UIPageViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    pages.removeAll()
    for (var i = 0; i < 4; i++) {
        var obj = "child"
        pages.append(obj)
    }

    pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
    pageViewController.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 64, self.view.frame.width, self.view.frame.height - 64)

    addChildViewController(pageViewController)
    self.view.addSubview(pageViewController.view)

    pageViewController.delegate = self
    pageViewController.dataSource = self

    pageViewController.setViewControllers([viewcontrollerAtIndex(0)], direction: .Forward, animated: true, completion: nil)
    pageViewController.didMoveToParentViewController(self)

    print(pages)


}

func viewcontrollerAtIndex(index: Int) -> UIViewController {
    let vc = storyboard?.instantiateViewControllerWithIdentifier(pages[index])
    return vc!
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {

        if index < pages.count - 1 {
            return viewcontrollerAtIndex(index + 1)
        }

    }

    return nil
}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

    if let index = pages.indexOf(viewController.restorationIdentifier!) {

        if index > 0 {
            return viewcontrollerAtIndex(index - 1)
        }

    }

    return nil
}

}

这是控制台日志

  

2016-03-13 14:19:16.743 FacebookAlbums [7550:1624956] *断言失败 - [FacebookAlbums.FAPageViewController willAnimateRotationToInterfaceOrientation:duration:],/ BuildRoot / Library / Books / com.apple.xbs /来源/ UIKit_Sim / UIKit的-3512.30.14 / UIPageViewController.m:1062   2016-03-13 14:19:16.748 FacebookAlbums [7550:1624956] * 由于未捕获的异常终止应用程序&#39; NSInternalInconsistencyException&#39;,原因:&#39;没有视图控制器&#39;

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。这就是我解决它的方法:通过在UIPageViewController实现文件中添加以下方法,我在设备轮换时再次设置了UIPageViewController(就像我们第一次做的那样):

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

因为大多数情况下,UIPageViewController是以模态方式呈现的,所以在设备旋转时,将再次调用此控制器。

答案 1 :(得分:1)

我也有一个应用程序继承了UIPageViewController。我已经使用了多年,但我们始终将其限制为纵向模式。我最近开始了另一个以此为基础的项目,但是在这种情况下,我们DID希望允许使用风景模式。该应用程序具有导航控制器和几个初始屏幕,然后推送到PageViewController。旋转可以与导航控制器顶部的常规VC一起使用,但是如果尝试在显示PageViewController的情况下进行旋转,则会出现异常:

2020-07-24 19:33:01.440876-0400 MAT-sf [68574:12477921] ***-[MAT_sf.SurveyVC willAnimateRotationToInterfaceOrientation:duration:]中的断言失败,/ Library / Caches / com.apple.xbs /Sources/UIKitCore_Sim/UIKit-3920.31.102/UIPageViewController.m:1055 2020-07-24 19:33:01.454443-0400 MAT-sf [68574:12477921] ***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无视图控制器'

原来,我要做的就是向我的子类中添加一个替代项:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
}

它所做的只是在超类中调用相同的函数。我猜想如果您将PageViewController子类化,这应该是必需的方法。

希望这对某人有帮助。这花了我大约一天的时间,直到我偶然发现了解决方案。