2016-02-12 83 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 
}