2016-02-12 85 views
1

我有5 UIViews,它們包含在UIScrollView之內。然後我將UIScrollViewcontentSize.height設置爲10,000。根據UIScrollView的高度設置UIView的高度

如何將UIScrollView中包含的每個視圖的高度更改爲contentSize.height1/5?另外,我想提到視圖和滾動視圖都是通過Interface Builder創建的。下面是一些在視圖控制器的代碼我已經試過的:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    self.scrollView.layoutIfNeeded() 
    scrollView.contentSize.width = UIScreen.mainScreen().bounds.size.width 
    scrollView.contentSize.height = 10000 
    myView.bounds.size.height = scrollView.contentSize.height * 1/5 
    print(scrollView.contentSize.height) 
} 

此代碼將工作,並且myView高度設置爲2000,但非常第二我滾動,認爲彈回原來的高度我在Interface Builder中設置。另外我想補充一點,當我打印scrollView的contentSize時,它會像預期的那樣返回10,000

長篇故事短片:如何製作一個UIView的高度1/5的Scroll Views內容大小?

+0

你使用自動佈局嗎? – beyowulf

+0

@beyowulf是的,我使用自動佈局,但如果必須的話,我願意禁用它。 – Harish

+0

使用自動佈局時,應更新約束而不設置框架/邊界。您可以將myView的高度設置爲您的scrollView的contentView的1/5,方法是選擇兩者,添加一個相同的高度約束,然後選擇該約束並在檢查器中將乘數從1更改爲0.20。 – beyowulf

回答

1

您可以像V:|[view1(==view2)][view2(==view3)]...[view5(==view1)]|在contentSize添加約束和這樣的觀點會牽制對方,並從頂部到內容大小的底部與每一將具有相同的高度。

+0

是的,這也是解決這個問題的另一種方法。這可能會導致更好的代碼,因爲所涉及的'@ IBOutlets'較少,所以我打算將您的解決方案標記爲已接受。 – Harish

0

好吧,所以我想我找到了解決方案。以下@beyowulf建議,我所做的是我爲UIScrollView中的五個視圖中的每一個創建了高度限制。然後我所做的是爲每個高度約束創建了一個@IBOutlet。最後,在viewDidLayoutSubviews方法中,我將高度限制constant屬性修改爲UIScrollView內容大小高度的1/5。

所以,這裏是一些示例代碼:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    self.pointBreakdownScrollView.layoutIfNeeded() 
    pointBreakdownScrollView.contentSize.width = UIScreen.mainScreen().bounds.size.width 
    scrollView.contentSize.height = 2000 

    view1HeightConstraint.constant = scrollView.contentSize.height * 1/5 
    view2HeightConstraint.constant = scrollView.contentSize.height * 1/5 
    view3HeightConstraint.constant = scrollView.contentSize.height * 1/5 
    view4HeightConstraint.constant = scrollView.contentSize.height * 1/5 
    view5HeightConstraint.constant = scrollView.contentSize.height * 1/5 
}