2016-05-23 81 views
3

我有兩個UIViewControllers與故事板標識符「vc0」和「vc1」,我試圖實例化UIScrollView內的對象的啓用分頁,使兩個視圖控制器彼此相鄰。目標是讓用戶在視圖控制器之間左右滑動,類似於SnapChat。UIScrollView中的ViewController約束,使用Storyboard

運行我的代碼時,scrollview的第一頁包含第一個視圖控制器,而第二個頁面根本不包含任何內容。我假設這是因爲第一個視圖控制器與第二個視圖控制器重疊。如何修改我的約束(或任何其他)來解決此問題,以便vc0的右邊緣與vc1的左邊緣會合?

UIScrollView包含在視圖控制器內的UIView中。這裏是包含所有相關代碼的viewDidLoad()。請讓我知道我應該提供的任何其他有用信息。

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    let screenWidth = self.view.frame.width 
    let screenHeight = self.view.frame.height 

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

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

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

    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) 

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height); 

    //ADD CONSTRAINTS TO vc0 

    vc0!.view.translatesAutoresizingMaskIntoConstraints = false 
    let horizontalConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0) 
    view.addConstraint(horizontalConstraint) 

    let widthConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth) 
    view.addConstraint(widthConstraint) 

    let heightConstraint = NSLayoutConstraint(item: vc0!.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenHeight) 
    view.addConstraint(heightConstraint) 

    //ADD CONSTRAINTS TO vc1 

    vc1!.view.translatesAutoresizingMaskIntoConstraints = false 
    let horizontalConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: vc0!.view, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0) 
    view.addConstraint(horizontalConstraint2) 

    let widthConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenWidth) 
    view.addConstraint(widthConstraint) 

    let heightConstraint2 = NSLayoutConstraint(item: vc1!.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: screenHeight) 
    view.addConstraint(heightConstraint) 
} 
+1

無需推倒重來,那裏有很多的開源庫,例如https://github.com/goktugyil/EZSwipeController – t0day

+2

@ t0day如果比現有的庫更好,那麼必須重新開發這個庫。 :) – BangOperator

回答

1

我覺得在約束中有問題!!

您應該添加一個viewscrollview,然後add views of both VC到該視圖不直接滾動視圖。

視圖的大小應該是相同scrollview's contentsize

現在你的約束應該是這樣的:

滾動視圖:頂部,底部,領先,落後

查看滾動型:頂部,底部,領先,落後,容器中的垂直中心(中心Y)和固定寬度(因爲你想水平滾動),如果想垂直滾動,那麼約束應該是(容器中心水平中心X)和固定高度。

你的觀點來自風險投資公司:上,領先,固定寬度,固定高度(寬度和高度應該是相同的屏幕尺寸)

希望這將有助於:)

+0

這個伎倆!感謝您的幫助。 – Lahav

+0

不客氣.... :) – Lion

相關問題