2016-07-28 75 views
0

我試圖讓使用此教程視圖控制器,而不是XIB文件輕掃導航:https://www.youtube.com/watch?v=3jAlg5BnYUU斯威夫特刷卡導航調整視圖控制器尺寸

我已經成功與視圖控制器來替代廈門國際銀行文件,但是當我運行應用程序的視圖控制器的寬度小於正常:

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代替frame,並添加到以下方法的子視圖中。請看一下,因爲當用戶界面發生變化時調用此方法:'override func viewDidLayoutSubviews(){ super.viewDidLayoutSubviews() }' – Juan

+0

當我編寫「添加到子視圖」時,我的意思是將您的代碼移動到添加的方法以前的評論 – Juan

+0

它實際上調整了視圖的大小,所以它很合適,但現在ViewController3首先出現,我可以向右滑動到ViewController2,這就是所有... – TheoF

回答

0

注意使用viewDidLoad中進行設定框架手動是有點冒險,應該儘量避免,因爲邊界是沒有設置。相反,使用viewDidLayoutSubviews來做到這一點,但請看一看,因爲在包含約束的UI元素更改時,該方法始終被調用。

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