这是我的代码:
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) }}
看看这里:
解决方法
就个人而言,当我想在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)}}
以上是来客网为你收集整理的ios – 禁用UIPageViewController弹跳 – Swift [复制]全部内容,希望文章能够帮你解决ios – 禁用UIPageViewController弹跳 – Swift [复制]所遇到的程序开发问题。
如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。
上一篇:iOS cocoapods – 如何添加libsqlite3.dylib
下一篇:已经是最后一篇