UIScrollview 不适用于情节提要

Posted

技术标签:

【中文标题】UIScrollview 不适用于情节提要【英文标题】:UIScrollview not working with Storyboard 【发布时间】:2015-02-15 20:56:32 【问题描述】:

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

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

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

有人可以逐步解释如何在情节提要中设置滚动视图吗?

我的限制:

【问题讨论】:

我假设您希望contentView 与主视图的宽度相同?我假设您将contentView 的前导/尾随约束添加到UIScrollView。问题是这些约束仅调整滚动视图的contentSize,而不是contentView 的大小。最重要的是,您必须在 contentViewUIScrollViewsuperview 之间添加一个约束。见***.com/a/22772106/1271826。 我编辑了我的问题。我尝试了 contentview 和 mainview 之间的约束,但仍然没有结果。 是的 contentView 应该和 mainView 一样。 【参考方案1】:

好的,让我们想象以下视图层次结构(注意,如果您在“身份检查器”的“文档”部分中为这些视图指定唯一名称,则在 Interface Builder 中查看约束会更容易):

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

    显然,相对于其父视图(在本例中为主视图)定义滚动视图:

    H:|[scrollView]|
    V:|[scrollView]|
    

    定义,contentView 使得

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

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

    因此:

    H:|[contentView(==view)]|
    V:|[contentView]|
    

    定义三个标签的布局,使它们在contentView 内偏移:

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

    与其硬编码contentView 的高度(以及滚动视图的contentSize,不如直接定义标签与contentView 的垂直高度的关系,这(因为上面的第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

这确认没有冲突的布局,也没有不明确的布局。

【讨论】:

以上是关于UIScrollview 不适用于情节提要的主要内容,如果未能解决你的问题,请参考以下文章

安全区域布局指南不适用于情节提要中的 UITableViewController

为啥使用情节提要在 UIScrollView 中不显示内容

UIScrollView 不能使用情节提要垂直滚动(使用自动布局)?

是否可以在情节提要中使用 uiscrollview 设计视图并检查自动布局?

IOS-如何在情节提要上为通用设备的 UIscrollview 设置框架?

如何使用情节提要和自动布局在 UIScrollView 中添加动态高度/空间元素? [复制]