iOS UIScrollView,我有什么误解?我无法通过滚动视图滚动

时间:2016-12-04 22:20:05

标签: ios uiscrollview interface-builder

我是一个非常新的iOS开发人员,我第一次需要滚动视图。我需要设计的页面有点复杂。由于我正在努力使其正确布局,我决定创建一个超级简单的场景,这样我就可以确保我理解如何使UIScrollViews工作。显然它没有帮助,因为事情不起作用,我在遵循几个教程后陷入困境。

我正在使用Xcode 8.1和Swift 3。

这篇文章末尾的截图。

我有一个场景,其中包含一个滚动视图和一个包含两个标签的子视图。我已将标签设置为相距约700pt,以尝试进行滚动。没有任何滚动,你只能看到第一个标签。此外,子视图不会扩展为全高。

您可以在屏幕截图中看到我的滚动视图有限制将其固定到超视图的两侧。

子视图也一样。

标签约束将它们放置在子视图中并且相互之间相距700pt。我认为这会给视图提供滚动所需的高度。没有约束错误。

我希望红色的儿童视图填满垂直空间,然后滚动。在这一点上,只要有东西在滚动,我就会采用任何布局。但没有什么,我没有得到什么?

截图:
(因链接限制而删除,因为我仍然是新的SO用户)

编辑(6/12/16):

我已经做了一些改变并且离得更近了。首先,我向其他人建议将其中一个标签设置为与滚动视图相等的高度。这现在给我“反弹”效果,这意味着东西是滚动的;但是,我们仍然只处理一个内容屏幕,因为下面隐藏的第二个标签被剪掉了。

这就是事情的立场:
edited hierarchy
edited screenshot

2 个答案:

答案 0 :(得分:0)

ScrollViews特别之处在于他们想明确知道它们应该滚动多少。我发现处理此问题的最佳方法是使以下层次结构具有一些约束:

-Scroll View
    -Content View
        -View (constrained to top, bottom, leading, trailing anchors)
            -Your other views (e.g. Label)

通过让一个View位于内容视图下面然后包含该视图中的所有其他视图,ScrollView会知道它应该滚动多少(它只使用一个子视图的大小)不管你在孩子里面有多少东西。

让我看看我是否可以从我的一个项目中拍摄一张示例图片。在此期间,请尝试使用此层次结构,并告诉我它是否适合您。您可能会将Label限制在子视图的顶部和前导锚点,然后将高度限制为高于屏幕的高度(例如1000个单位)。

如果您有任何问题,请与我们联系。

编辑:下面的示例层次结构

Content View has a child View which holds all of your other Views

答案 1 :(得分:0)

在故事板中使用UIScrollView时,您需要确保滚动视图能够计算其内容的大小。如果您没有足够的约束,那么您将在Interface Builder中收到错误:

  

可滚动内容大小歧义

单击此错误上的“信息”图标将告知您需要触摸滚动视图的所有侧面的约束,并确保您可以从左到右和从上到下跟踪连续的约束线

无论是否添加了内容视图,都可以实现此目的。我将向您展示如何在滚动视图中没有内容视图的情况下执行此操作,因为这样的约束更少,因此更少键入。

  1. 将滚动视图添加到根视图
  2. 将滚动视图的顶部/左侧/顶部/底部约束到其超级视图(根视图)。如果您想要屏幕的整个宽度,请记得关闭约束边距
  3. 将标签1和标签2添加到滚动视图
  4. 将标签1的顶部/前导/底部限制为滚动视图
  5. 将标签2的顶部/尾部/底部限制为滚动视图
  6. 将标签1的后缘约束到标签2的前缘,带有0个空格
  7. 将标签1的宽度限制为等于滚动视图的宽度
  8. 将标签1的高度限制为等于滚动视图的高度
  9. 将标签2的宽度和高度限制为等于标签1的宽度和高度
  10. 没有第10步:)
相关问题