2016-08-08 8 views
8

Цели: сделать ViewController несколько страниц и может быть выгружена через сегментированный контроллер, содержание страниц являются прокрутка по вертикалиподтаблица прокрутки не работает СВИФТ

детали:

  • Я сделал pagviewcontroller и внедренный его как подвид к основному 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) 
    } 
    
  • я назвал функцию pageViewController, и я добавляю страницы через restoratio п Идентификаторы

  • мне удалось сегментированный контроллер представления, получая pageindex и установка ViewController как это:

    EditTabs.setViewControllers([pagesAtIndexPath(0)!], direction:.Reverse, animated: true, completion: nil) 
    
  • в раскадровку суб-страницы имеет вид прокрутки внутри держать Контента

  • Я тестировал подстраницы прокручивают просмотр, вызывая его через segue и его рабочий штраф

Корпус:

  • все работают хорошо только для просмотра прокрутки подстраниц не работают на всех

Как решить эту проблему? ваши рекомендации будут оценены

Спасибо,

ответ

5
  1. Я создал контроллер с PageViewController вида с три View Controllers, которые прокручивают вид в нем. Он работает нормально.

    импорт 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 без проблем в своем собственном представлении, но при использовании в качестве подвью в другом подзапросе мне нужно было установить размеры прокрутки в программном виде.

Свифта 2

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

или

Свифта 3

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

Еще один (и часто рассматривается как лучше) предложения, автоматически установить s ize по содержанию.

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

Надеюсь, это поможет.