2015-03-01 3 views
0

Я создаю UIViewController, содержащий выгружаемый UIScrollView, который должен добавлять представления, созданные из StoryBoard.I'm, ссылающиеся на this article. В основном структураДобавление subviews в UIScrollview с подкачкой в ​​Swift

- MyController 
    - UIScrollView 
    - subview 
    - subview 
    - ... 

Это, как мой Раскадровки выглядит следующим образом:

Левая это часть моего основного зрения контроллера, который содержит Scrollview. Правильный - это контроллер просмотра «freeForm», который я использую для создания экземпляров отдельных страниц. Оба они имеют одинаковый размер.

enter image description hereenter image description here

Это код, я использую для главного контроллера:

import UIKit 

class MainControllerVC: UIViewController { 


    @IBOutlet var tagsScrollview: UIScrollView! 
    var tagsPages:[UIViewController] = [] 
    var frame: CGRect = CGRectMake(0,0,0,0) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // generate tags view controller 
     for index in 0..<5 { 

      frame.origin.x = self.tagsScrollview.frame.size.width * CGFloat(index) 
      frame.size = self.tagsScrollview.frame.size 
      tagsScrollview.pagingEnabled = true 
      if let page:UIViewController = self.storyboard?.instantiateViewControllerWithIdentifier("tagsVC") as? UIViewController { 

       var delta = 0.2 * CGFloat(index) 
       page.view.frame = self.frame 
       page.view.backgroundColor = UIColor(red: 0.2 + delta, green: 0.2 + delta, blue: 0.2 + delta, alpha: 1.0) 
       self.tagsScrollview.addSubview(page.view) 
       tagsPages.append(page) 
      } 

     } 

     self.tagsScrollview.contentSize = CGSizeMake(self.tagsScrollview.frame.size.width * CGFloat(tagsPages.count), self.tagsScrollview.frame.size.height) 


     // Do any additional setup after loading the view. 
    } 

    override func viewWillAppear(animated: Bool) { 

     super.viewWillAppear(animated) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

Я создаю несколько фиктивных страниц с различными цветами и центральной меткой, которая была помещена в центр с использованием автоматической компоновки.

В результате получается следующее:

enter image description here

Первая (темнее) страница подтаблица добавляется правильно на самом деле размер зрения и положение метки является то, что мы ожидаем. Однако второе представление страницы добавляется в неправильную позицию X. То же самое справедливо для следующих. В настоящее время я запускаю пример на симуляторе iPhone 6, и если я добавлю 89 точек к self.tagsScrollview.frame.size.width, когда я вычисляю размер кадра страницы и scrollview contentSize, проблема решена .... но только для iPhone6 ​​!!! Похоже, что размер scrollview не является тем, что мы ожидаем, поскольку его недостаточно для создания в нем эквидистантных страниц.

Я подозреваю проблему автоматической компоновки, но не знаю, с чего начать.

Эта вещь сводит меня с ума. Любая помощь могла бы быть полезна.

ответ

3

Попробуйте создать свои страницы в viewDidLayoutSubviews. Я обнаружил, что viewDidLoad был слишком ранним, и у вас все еще есть размеры фреймворка - не окончательный размер времени выполнения.

У меня были похожие проблемы с прокруткой страниц, и это сработало для меня.

Смежные вопросы