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

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

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

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

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

我的限制:

【问题讨论】:

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

标签: swift uiscrollview ios8 xcode6


【解决方案1】:

好的,让我们想象以下视图层次结构(注意,如果您在“身份检查器”的“文档”部分中为这些视图指定唯一名称,则在 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,不如直接定义标签与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

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

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2018-02-15
    • 2020-01-01
    相关资源
    最近更新 更多