2016-08-08 15 views
8

cel: zrobić viewcontroller mają wiele stron i może być zastąpiony przez segmentowej kontrolera, strony treści są Przesuwne w pioniesubview przewijania nie działa SWIFT

szczegóły:

  • Zrobiłem pagviewcontroller i osadzone go jako podrzędny do głównej viewcontroller

    //add pageviewcontroller as subview to viewcontroller 
    if let vc = storyboard?.instantiateViewControllerWithIdentifier("ProfileEditController"){ 
    
        self.addChildViewController(vc) 
        self.view.addSubview(vc.view) 
    
        EditTabs = vc as! UIPageViewController 
        EditTabs.dataSource = self 
        EditTabs.delegate = self 
    
        //define First page 
        EditTabs.setViewControllers([pagesAtIndexPath(0)!], direction:.Forward, animated: true, completion: nil) 
        EditTabs.didMoveToParentViewController(self) 
    
        //bring segmented view buttons to front of pageViews 
        self.view.bringSubviewToFront(self.topTabs) 
    } 
    
  • nazwałem funkcje pageViewController i dodaję stron poprzez restoratio n Identyfikatory

  • udało mi segmentowy kontroler widok dostając PageIndex i ustawienie viewcontroller tak:

    EditTabs.setViewControllers([pagesAtIndexPath(0)!], direction:.Reverse, animated: true, completion: nil) 
    
  • w scenorys stron sub ma widoku przewijania wewnątrz do przechowywania zawartości

  • Testowałem podstrony przewijaj widok, wywołując go przez segment i działa poprawnie

Przypadek:

  • wszystko działa grzywny jedynie przeglądać przewijania podstron nie działa w ogóle

Jak rozwiązać ten problem? wasze wskazówki będą mile widziane

Dzięki,

Odpowiedz

5
  1. Stworzyłem kontroler widok z PageViewController z trzema Zobacz kontrolerów, które przewijać widok w nim. To działa dobrze.

    import UIKit klasa ViewController: UIViewController, UIPageViewControllerDataSource {

    var viewControllers : [UIViewController]? 
    override func viewDidLoad() { 
        super.viewDidLoad() 
        CreatePageView() 
    } 
    
    func CreatePageView() { 
    
        SetupViewControllers() 
    
        let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil) 
        pageViewController.dataSource = self 
        pageViewController.setViewControllers([(viewControllers?[0])!] , direction: .forward, animated: false, completion: nil) 
        pageViewController.view.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height); 
        pageViewController.view.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height); 
        addChildViewController(pageViewController) 
        view.addSubview(pageViewController.view) 
        pageViewController.didMove(toParentViewController: self) 
        pageViewController.view.backgroundColor = UIColor.blue 
    } 
    
    func SetupViewControllers() { 
        let firstVC = UIViewController() 
        firstVC.view.tag = 100 
        firstVC.view.backgroundColor = UIColor.red 
        AddScrollView(bgView: firstVC.view) 
        let secondVC = UIViewController() 
        secondVC.view.tag = 101 
        secondVC.view.backgroundColor = UIColor.brown 
        AddScrollView(bgView: secondVC.view) 
        let thirdVC = UIViewController() 
        thirdVC.view.tag = 102 
        thirdVC.view.backgroundColor = UIColor.purple 
        AddScrollView(bgView: thirdVC.view) 
    
        viewControllers = [firstVC,secondVC,thirdVC] 
    
    } 
    
    func AddScrollView(bgView: UIView) { 
        let scrollView = UIScrollView() 
        scrollView.frame = CGRect.init(x: 10, y: 10, width: bgView.frame.width-20, height: bgView.frame.height-20) 
        scrollView.backgroundColor = UIColor.init(red: 0.34, green: 0.45, blue: 0.35, alpha: 0.9) 
        bgView.addSubview(scrollView) 
        scrollView.contentSize = CGSize.init(width: scrollView.frame.size.width, height: scrollView.frame.size.height+200) 
    } 
    
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
        if viewController.view.tag == 101 { 
         return viewControllers?[0] 
        } 
        else if viewController.view.tag == 102{ 
         return viewControllers?[1] 
        } 
        else{ 
         return viewControllers?[2] 
        } 
    } 
    
    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 
        if viewController.view.tag == 101 { 
         return viewControllers?[0] 
        } 
        else if viewController.view.tag == 102{ 
         return viewControllers?[1] 
        } 
        else{ 
         return viewControllers?[2] 
        } 
    } 
    
    func presentationCount(for pageViewController: UIPageViewController) -> Int { 
        return (viewControllers?.count)! 
    } 
    
    func presentationIndex(for pageViewController: UIPageViewController) -> Int { 
        return 0 
    } 
    

    }

1

Podobne problemy są podnoszone dość często na stos. Dla mojego własnego problemu w bardzo podobnych okolicznościach, ja także mogłem używać przewijania bez problemu w jego własnym widoku, ale kiedy byłem używany jako wyskok w innym wydziale, musiałem programować wymiary przewijania.

Swift 2

scrollView.setFrame(CGRectMake(0, 0, DEVICE_WIDTH, DEVICE_HEIGHT))

lub

Swift 3

scrollView.setFrame(CGRect(x: 0, y: 0, width: DEVICE_WIDTH, height: DEVICE_HEIGHT))

Kolejnym (często postrzegane jako lepsze) sugestii automatycznie ustawić s ize na podstawie zawartości.

var contentRect = CGRectZero 
for view in self.scrollView.subviews { 
    contentRect = CGRectUnion(contentRect, view.frame) 
} 
self.scrollView.contentSize = contentRect.size 

Mam nadzieję, że to pomoże.

Powiązane problemy