2016-07-28 3 views
0

Я пытаюсь сделать салфетки навигации с видом на контроллерах вместо XIb файлов с помощью этого учебника: https://www.youtube.com/watch?v=3jAlg5BnYUUSwift салфетки навигации размер корректировки зрения контроллера

Я сумел заменить файлы XIb с контроллерами зрения, но когда я запустить приложение ширина контроллеров зрения меньше, чем обычно:

Screenshot

Я не понимаю, как это установлено идентично с XIb файлов. Кто-нибудь знает, как это решить?

Вот мой код:

import UIKit 

class ViewController: UIViewController { 

@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let vc0 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController0") 

    self.addChildViewController(vc0!) 
    self.scrollView.addSubview(vc0!.view) 
    vc0!.didMoveToParentViewController(self) 


    let vc1 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController1") 

    var frame1 = vc1!.view.frame 
    frame1.origin.x = self.view.frame.size.width 
    vc1!.view.frame = frame1 

    self.addChildViewController(vc1!) 
    self.scrollView.addSubview(vc1!.view) 
    vc1!.didMoveToParentViewController(self) 


    let vc2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") 

    var frame2 = vc2!.view.frame 
    frame2.origin.x = self.view.frame.size.width * 2 
    vc2!.view.frame = frame2 

    self.addChildViewController(vc2!) 
    self.scrollView.addSubview(vc2!.view) 
    vc2!.didMoveToParentViewController(self) 


    let vc3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") 

    var frame3 = vc3!.view.frame 
    frame3.origin.x = self.view.frame.size.width * 3 
    vc3!.view.frame = frame3 

    self.addChildViewController(vc3!) 
    self.scrollView.addSubview(vc3!.view) 
    vc3!.didMoveToParentViewController(self) 


    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 4, self.view.frame.size.height - 66) 


} 

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


} 
+0

Вы можете попробовать использовать .bounds вместо рамки и добавить в подвью в следующем методе. Взгляните, потому что этот метод вызывается при изменении пользовательского интерфейса: 'override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() }' – Juan

+0

Когда я писал «Добавить в подвью», я хотел переместить код в метод, добавленный в предыдущий комментарий – Juan

+0

Он фактически изменил размер представления так, чтобы он хорошо вписывался, но теперь сначала появляется ViewController3, и я могу перейти прямо к ViewController2, и это все ... – TheoF

ответ

0

Обратите внимание, что с помощью viewDidLoad для набора фреймов вручную немного рискованно и его следует избегать, так как границы не установлены. Вместо этого используйте viewDidLayoutSubviews для этого, но посмотрите, потому что метод вызывается все время, когда элементы пользовательского интерфейса меняются, включая ограничения.

var scrollViewAdded = false 

override func viewDidLayoutSubviews() { 

    super.viewDidLayoutSubviews() 

    if !scrollViewAdded { 

     self.loadSrollView() 

     self.scrollViewAdded = true 
    } 
} 


func loadSrollView() { 

    self.scrollView.pagingEnabled = true 

    let vc0 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController0") 

    self.addChildViewController(vc0!) 
    self.scrollView.addSubview(vc0!.view) 
    vc0!.didMoveToParentViewController(self) 

    let vc1 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController1") 

    var frame1 = vc1!.view.frame 
    frame1.origin.x = self.view.frame.size.width 
    vc1!.view.frame = frame1 

    self.addChildViewController(vc1!) 
    self.scrollView.addSubview(vc1!.view) 
    vc1!.didMoveToParentViewController(self) 

    let vc2 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController2") 

    var frame2 = vc2!.view.frame 
    frame2.origin.x = self.view.frame.size.width * 2 
    vc2!.view.frame = frame2 

    self.addChildViewController(vc2!) 
    self.scrollView.addSubview(vc2!.view) 
    vc2!.didMoveToParentViewController(self) 

    let vc3 = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController3") 

    var frame3 = vc3!.view.frame 
    frame3.origin.x = self.view.frame.size.width * 3 
    vc3!.view.frame = frame3 

    self.addChildViewController(vc3!) 
    self.scrollView.addSubview(vc3!.view) 
    vc3!.didMoveToParentViewController(self) 

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 4, self.view.frame.size.height - 66) 
} 
+0

Хорошо работает, спасибо! Просто небольшая деталь: вокруг вида есть небольшая синяя рамка, как если бы был фон, он очень маленький, но у вас есть идея, как его удалить? – TheoF

+0

Извините, я добавил границу, чтобы проверить, подходят ли представления. Удалите строки: 'vc0 ?.view.layer.borderColor = UIColor.blueColor(). CGColor vc0? .view.layer.borderWidth = 1' делать то же самое с vc1, vc2 и vc3 – Juan

+0

Спасибо! (должен был увидеть это, прежде чем спросить вас ... извините) – TheoF

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