Swift - UIScrollView 部分滚动

Swift - UIScrollView Scrolls Partially

我的问题与使用自动布局时其他人的'Swift UIScrollView'问题略有不同:

问题: 与其他人不同,当我 运行 我的应用程序时,它会滚动。我的问题是滚动条截掉了底部 20-30% 的内容。我可以拉动以查看按钮是否已构建并位于下方,但是当我放开它时,滚动条会弹回假底部,这会切断我的内容!!!几天来,我一直在尝试修复它以滚动整个高度,但它继续中断!!

应用说明: 我使用自动布局来布局 6 个按钮和标签。每个按钮都是一个矩形图像,其正下方有一个标签。 (抱歉,网站不允许我 post 图片!)

我的观点是这样排列的: MainView > ScrollView > ContentView > 按钮和标签

我将我的 contentView 固定到我的 ScrollView,并将我的 ScrollView 固定到我的 MainView。我的按钮和标签都有正确构建的约束,以创建如下所示的列表:

矩形按钮 标签在它下面 间距 长方形按钮 标签在它下面 间距 等等

谁能告诉我为什么我不能滚动整个视图?

如您所说,使用 contentView 通常可以解决问题。因此,您很可能需要重新审视您的限制条件。也许在 clean/new 项目中尝试这个解决方案,看看它是否有效。 (它确实有效)。我的猜测是您的某些约束相互冲突。

否则我认为 setContentSizeviewDidLoad 中使用 scrollView 是个好主意。

另一个技巧是在右上角和左下角放置 2 个 UI 对象,并将其 alpha 设置为零。这会提示 scrollView 设置它的 contentSize。

您对如何限制项目的描述含糊不清,因此我将列出完成这项工作所需的所有限制。然后你可以比较你所拥有的和你需要的,并相应地进行调整。

  1. 您的 ScrollView 应该固定在 MainView 的所有 4 个边上。 (这不是绝对必要的。您可以根据需要限制 ScrollView,但要确保它可以随着设备 and/or 方向的变化而增长)。

  2. 您的 ContentView 应该固定在 ScrollView 的所有 4 个边上,偏移量为 0。

  3. 由于您希望 ScrollView 仅垂直滚动,因此使用 Equal Widths 约束将 ContentView 的宽度限制为 ScrollView 的宽度。为此,在 Document Outline 视图中,Control - 从您的 ContentView 拖动到您的 ScrollView 和 select 弹出窗口中的等宽

  4. ContentView 的高度将由其中所有内容的总高度来设置。为了让它工作,最上面的按钮需要固定到 ContentView 的顶部,所有按钮和标签都应该固定到它们最近的邻居,最底部的标签应该固定到 ContentView 的底部。此外,您所有的按钮和标签都应该对其宽度和高度有限制。我建议为您的按钮设置显式宽度约束和显式高度约束,并将它们在 ContentView 中水平居中。对于您的标签,设置明确的高度约束并将左右边缘固定到 ContentView。

如果您有这些限制而没有其他限制,您的 ContentView 的大小将会适当。