【问题标题】:guide for UIScrollView and autolayoutUIScrollView 和自动布局指南
【发布时间】:2015-01-20 11:07:58
【问题描述】:

我在 UIScrollView 和 AutoLayout 上苦苦挣扎。我read a blog 并尝试做我自己的事情。但是,Xcode 报告的内容大小不明确。我将 scrollview 和前导、尾随、顶部、底部约束从超级视图设置为 0。

有一个UIView 作为容器来保存我的所有子视图,包括两个UILabel 元素和两个UICollectionView 视图。我将容器视图设置为与视图控制器的视图等宽和等高。然后我将UILabelUICollectionView 视图约束全部设置为0。但是它运行如下图。

请帮助我或给我一些关于UIScrollView 和 AutoLayout 的文档或指南。

【问题讨论】:

    标签: ios uiscrollview autolayout


    【解决方案1】:

    您的主要问题是滚动视图的内容(即您的容器视图)未固定到滚动视图。

    这是我的建议:

    1) 移除容器视图的宽度和高度约束。

    2) 将容器视图的左、上、右和下固定到滚动视图的左、上、右和下。通过这样做,无论您的容器视图有多大,都将定义 scrollView 的可滚动区域。

    3) 如果您只想让内容垂直滚动,请将容器视图的宽度限制为滚动视图的宽度。

    4) 您需要指定容器视图的高度。你可以通过给它一个固定的高度约束来做到这一点。确保它大于 scrollView 的高度,否则将没有什么可以滚动的。另一种方法是确保其内容视图大小已完全指定,并且容器视图中最顶部的视图被固定到容器视图的顶部,容器视图中最底部的视图被固定到底部,并且视图应垂直固定在一起。换句话说,您的容器视图中应该有足够的约束,以便自动布局能够计算容器视图的高度。

    【讨论】:

    • 谢谢!我删除了所有并重新开始。似乎工作,但是,集合视图(内部容器视图)的高度是根据那里有多少个单元格计算的,所以在获得单元格的所有数据之前我无法知道。我该如何处理这个问题,比如说,以编程方式更改约束?
    • 您可以通过将IBOutlet 添加到代码中的约束来以编程方式更改约束。控制从 Document Outline 视图中的约束拖动到您的代码,并将其命名为 collectionViewHeight。然后你可以像这样更新它:collectionViewHeight.constant = 300.
    • 我应该在哪里更新它是正确的? Layoutsubview 还是其他?
    • 知道collectionView的高度后更新约束,然后在collectionView上调用layoutIfNeeded
    • 我阅读了有关将约束设置为占位符的 Apple 文档,我认为这是我的情况,因为在创建单元格后我的集合视图的高度会发生变化。我确实选择了集合视图的高度约束作为占位符,但是在运行时,整个集合视图没有出现。在此之前,我可以看到它。设置为占位符后还需要做什么?
    猜你喜欢
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2015-09-08
    • 2021-08-27
    • 2014-11-15
    • 2013-10-18
    相关资源
    最近更新 更多