2016-08-08 57 views
8

目標:做一個視圖控制器有多個頁面,並且可以通過分段控制器進行交換,內容的網頁滾動垂直子視圖滾動不工作SWIFT

細節:

  • 我做了一個pagviewcontroller和嵌入它作爲一個子視圖到主視圖 - 控制

    //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) 
    } 
    
  • 我叫pageViewController功能,並且我將通過restoratio頁N個標識符

  • 我通過獲取的PageIndex和設置視圖 - 控制這樣的管理分割視圖控制器:

    EditTabs.setViewControllers([pagesAtIndexPath(0)!], direction:.Reverse, animated: true, completion: nil) 
    
  • 在故事板的子頁面具有內滾動視圖舉辦

  • 我測試的內容子頁面滾動視圖通過調用它通過segue和其工作正常

案例:

  • 一切工作的子頁面的罰款只有滾動視圖是不是在所有

工作,如何解決這個問題? 您指引我將非常感激

感謝,

回答

5
  1. 我已經創建了一個PageViewController視圖控制器與在它已經滾動視圖中有三個視圖控制器。它工作正常。

    進口的UIKit 類的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

類似問題相當頻繁的堆棧提高。對於我自己的問題,在非常相似的情況下,我也可以在它自己的視圖中使用scrollview而不會出現問題,但是當在另一個子視圖中用作子視圖時,我需要以編程方式設置scrollview尺寸。

夫特2

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

夫特3

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

另一個(並且通常被視爲一個更好的)建議,自動設定小號根據內容進行分類。

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

希望這會有所幫助。