HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 禁用UIPageViewController弹跳 – Swift [复制]大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Disable UIPageViewController bounce8个
我一直在制作一个在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)

    }

}@H_301_6@ 
 

看看这里:

解决方法

我不知道你能不能. 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
}@H_301_6@ 
 

以前的答案

像这样:

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)
}}@H_301_6@

大佬总结

以上是大佬教程为你收集整理的ios – 禁用UIPageViewController弹跳 – Swift [复制]全部内容,希望文章能够帮你解决ios – 禁用UIPageViewController弹跳 – Swift [复制]所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。