禁用UIPageViewController弹跳 – Swift

我一直在UIViewControllers之间滚动示例应用程序,但重点是我想禁用滚动效果在滚动和返回到第一个UIViewController

这里是我的代码:

 class PageViewController: UIPageViewController,UIPageViewControllerDataSource, UIPageViewControllerDelegate{ var index = 0 var identifiers: NSArray = ["FirstNavigationController", "SecondNavigationController"] override func viewDidLoad() { self.dataSource = self self.delegate = self let startingViewController = self.viewControllerAtIndex(self.index) let viewControllers: NSArray = [startingViewController] self.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) } func viewControllerAtIndex(index: Int) -> UINavigationController! { let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) //first view controller = firstViewControllers navigation controller if index == 0 { return storyBoard.instantiateViewControllerWithIdentifier("FirstNavigationController") as! UINavigationController } //second view controller = secondViewController's navigation controller if index == 1 { return storyBoard.instantiateViewControllerWithIdentifier("SecondNavigationController") as! UINavigationController } return nil } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { let identifier = viewController.restorationIdentifier let index = self.identifiers.indexOfObject(identifier!) //if the index is the end of the array, return nil since we dont want a view controller after the last one if index == identifiers.count - 1 { return nil } //increment the index to get the viewController after the current index self.index = self.index + 1 return self.viewControllerAtIndex(self.index) } func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { let identifier = viewController.restorationIdentifier let index = self.identifiers.indexOfObject(identifier!) //if the index is 0, return nil since we dont want a view controller before the first one if index == 0 { return nil } //decrement the index to get the viewController before the current one self.index = self.index - 1 return self.viewControllerAtIndex(self.index) } } 

看看这里:

在这里输入图像说明

我不知道你能不能 UIPageController不是非常可定制的。

就个人而言,当我想在UIViewController之间滚动时,我更喜欢使用一个简单的UIViewController,它将是一个容器,并在其中包含一个UIScrollView。 然后我编程添加UIScrollView的contentSize中的所有控制器。 您必须将所有控制器添加为容器的子项。

更新iOS 9

 func setupDetailViewControllers() { var previousController: UIViewController? for controller in self.controllers { addChildViewController(controller) addControllerInContentView(controller, previousController: previousController) controller.didMoveToParentViewController(self) previousController = controller } } func addControllerInContentView(controller: UIViewController, previousController: UIViewController?) { contentView.addSubview(controller.view) controller.view.translatesAutoresizingMaskIntoConstraints = false // top controller.view.topAnchor.constraintEqualToAnchor(contentView.topAnchor).active = true // bottom controller.view.bottomAnchor.constraintEqualToAnchor(contentView.bottomAnchor).active = true // trailing trailingContentViewConstraint?.active = false trailingContentViewConstraint = controller.view.trailingAnchor.constraintEqualToAnchor(contentView.trailingAnchor) trailingContentViewConstraint?.active = true // leading let leadingAnchor = previousController?.view.trailingAnchor ?? contentView.leadingAnchor controller.view.leadingAnchor.constraintEqualToAnchor(leadingAnchor).active = true // width controller.view.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true } 

先前的回答

像这样:

scrollView是一个IBOutlet,与ContainerViewController的每个边相对

 class ContainerViewController: UIViewController { @IBOutlet var scrollView: UIScrollView! override func viewDidLoad() { super.viewDidLoad() scrollView.bounces = false scrollView.pagingEnabled = true } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func viewDidLayoutSubviews() { initScrollView() } func initScrollView(){ let viewController1 = storyboard?.instantiateViewControllerWithIdentifier("ViewController1") as! ViewController1 viewController1.willMoveToParentViewController(self) viewController1.view.frame = scrollView.bounds let viewController2 = storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2 viewController2.willMoveToParentViewController(self) viewController2.view.frame.size = scrollView.frame.size viewController2.view.frame.origin = CGPoint(x: view.frame.width, y: 0) scrollView.contentSize = CGSize(width: 2 * scrollView.frame.width, height: scrollView.frame.height) scrollView.addSubview(viewController2.view) self.addChildViewController(viewController2) viewController2.didMoveToParentViewController(self) scrollView.addSubview(viewController1.view) self.addChildViewController(viewController1) viewController1.didMoveToParentViewController(self) }}