UIScrollview 不适用于 Storyboard

UIScrollview not working with Storyboard

您好,我正在尝试在情节提要中设置滚动视图,并按照以下步骤进行操作:

  1. 向根视图添加滚动视图。
  2. 将零空格固定到超级视图的所有边缘。
  3. 在上面的scrollview中添加一个UIView(contentView)。
  4. 将零空格固定到滚动视图的所有边缘添加一些小部件 contentView 并将 contentView 的高度更改为 2000.

我看到此解决方案适用于我看过的许多教程,但不适用于我。我究竟做错了什么?我用 swift.

谁能一步步解释如何在故事板中设置滚动视图?

我的约束:

好的,让我们想象以下视图层次结构(请注意,如果您在 "Identity Inspector" 的 "Document" 部分中为这些视图指定唯一名称,则在 Interface Builder 中查看约束会更容易):

要设置它,您需要在 IB 中添加以下约束(我打算用 VFL 编写它,因为这是显示约束的一种非常简洁的方式):

  1. 显然,相对于它的父视图(主视图,在这个例子中)定义滚动视图:

    H:|[scrollView]|
    V:|[scrollView]|
    
  2. 定义,contentView使得

    • 它的宽度与主视图相同(==view),并且

    • 滚动视图的 contentSize 将更改以适应 contentView 的大小。根据 TN2154,滚动视图及其子视图之间的约束定义了滚动视图的 contentSize,而不是子视图的相对大小。

    因此:

    H:|[contentView(==view)]|
    V:|[contentView]|
    
  3. 定义三个标签的布局,使它们在 contentView:

    范围内偏移
    H:|-[label1]-|
    H:|-[label2]-|
    H:|-[label3]-|
    
  4. 与其硬编码 contentView 的高度(以及滚动视图的 contentSize,不如定义标签与 [= 的垂直高度的关系15=],它(由于上面的第 2 步)调整滚动视图 contentSize 的垂直高度:

    V:|-[label1]-[label2]-[label3]-|
    

这就是您需要做的全部。我没有对任何宽度进行硬编码(主视图自动具有宽度,滚动视图,更重要的是 contentView 定义了与此相关的宽度。但是标签宽度是从 contentView,并且 contentView 高度(以及滚动视图的 contentSize)是从三个标签的固有高度推断出来的。

最终结果是 IB 中的约束如下所示:


仅供参考,如果您想进行一些诊断,您可以在模拟器上 运行 应用程序时单击查看调试按钮:

您可以查看视图(以及可选的约束)并确保一切正常:

您还可以通过 (lldb) 提示查看 _autolayoutTrace

(lldb) po [[UIWindow keyWindow] _autolayoutTrace]

UIWindow:0x7fbbb3617910
|   •UIView:0x7fbbb349a840
|   |   *UIScrollView:0x7fbbb3491c80
|   |   |   *UIView:0x7fbbb348e180
|   |   |   |   *UILabel:0x7fbbb348e450'Label'
|   |   |   |   *UILabel:0x7fbbb3490670'Label'
|   |   |   |   *UILabel:0x7fbbb3490a70'Label'
|   |   |   UIImageView:0x7fbbb34a3eb0
|   |   |   UIImageView:0x7fbbb34a3800
|   |   *_UILayoutGuide:0x7fbbb349a970
|   |   *_UILayoutGuide:0x7fbbb349b460

这确认没有布局冲突,也没有模棱两可的布局。