【问题标题】:Setting a UIView's height based on UIScrollView's height根据 UIScrollView 的高度设置 UIView 的高度
【发布时间】:2016-02-12 22:41:06
【问题描述】:

我有 5 个 UIViews 包含在 UIScrollView 中。然后我将UIScrollViewcontentSize.height 设置为10,000。

如何将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 中设置的原始高度。我还想补充一点,当我打印滚动视图的 contentSize 时,它会像预期的那样返回 10,000

长话短说:如何使 UIView 的高度为 Scroll Views 内容大小的 1/5?

【问题讨论】:

  • 你在使用自动布局吗?
  • @beyowulf 是的,我正在使用自动布局,但如果必须,我愿意禁用它。
  • 使用自动布局时,您应该更新约束而不是设置框架/边界。您可以将 myView 的高度设置为 scrollView 的 contentView 的 1/5,方法是同时选择两者,添加相等的高度约束,然后选择该约束并在检查器中将乘数从 1 更改为 0.20。
  • @beyowulf 如果我在 IB 中设置创建约束,我将 myView 设置为具有乘数为 1:5 的等高约束,然后在代码中调用更新约束,它会起作用吗?跨度>
  • @beyowulf 没有,我会尝试为 contentSize 创建一个约束。

标签: ios swift uiview uiscrollview


【解决方案1】:

您可以在 contentSize 上添加约束,例如 V:|[view1(==view2)][view2(==view3)]...[view5(==view1)]|,这样视图将相互固定,并从内容大小的顶部到底部固定,并且每个视图都具有相同的高度。

【讨论】:

  • 是的,这也是这个问题的另一个解决方案。这可能会产生更好的代码,因为涉及的 @IBOutlets 较少,因此我将您的解决方案标记为已接受。
【解决方案2】:

好的,我想我找到了解决方案。根据 @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
}

【讨论】:

    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 2021-08-12
    • 2011-08-06
    • 2019-01-21
    • 1970-01-01
    • 2019-06-25
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多