【问题标题】:XCode: laying out scrolling content in IBXCode:在 IB 中布局滚动内容
【发布时间】:2014-10-03 18:47:05
【问题描述】:

TL;DR:在 Interface Builder 中布局超大滚动视图内容的最佳方式是什么?

我正在尝试找出在 Interface Builder 中布局屏幕外/滚动内容最不痛苦的方法。我目前的方法是调整滚动视图内容的宽度和高度约束以查看 IB 中的所有内容,然后再恢复到适当的构建约束,但这会很麻烦。也就是说,为了便于编辑,我更愿意更多地以图形方式进行操作,而不是编程方式。

我能想到的一般做法是:

  1. 使用嵌入式 segues 以大小精确的方式构建视图(最直观的流程图方法)
  2. 调整编辑约束,重置构建
  3. 在 IB 中使用占位符值/约束(尚未尝试过)
  4. 以编程方式布局过大的内容

更详细地说,我正在尝试构建一个由子视图组成的垂直滚动视图。每个子视图都是自包含的,并且可能出现在多个上下文中,我想让它们保持隔离(事实上,我也嵌入了它们,但这不会影响问题)。我想做的是使用 IB 来布局一个高大的复合内容视图。然后,我想再次使用容器视图的单个内容视图创建外部滚动视图,嵌入复合内容视图。 IE。左侧的灰色内容视图在右侧嵌入了较高的红色/蓝色内容,我想知道是否可以推断出高度,因此它可能与设备无关(视图是方形的,因此它们将从设备中获取宽度)

总结一下,我是否可以从嵌入视图内容的实际高度推导出托管滚动视图的 contentView 高度,或者我应该使用方法 2、3 还是其他方法?

需要明确的是,自动布局要求滚动视图内容视图定义边缘约束和宽度/高度尺寸。就我而言,我希望能够将宽度预设为设备宽度,但将高度从红色/蓝色内容视图中导出。 IB 不会让我在 Storyboard 中的嵌入和嵌入场景之间拖动约束,当我遗漏该字段时,它使用原型值作为内容高度。

是否建议在 IB 中使用占位符大小 (3) 以使内容可见以进行编辑,知道运行时约束会正确呈现它(即 Storyboard 中的滚动视图过大,因此所有滚动内容都可见)?相反,即使尝试也是愚蠢的 - 我应该以编程方式完成所有滚动视图内容组合 (4) 吗?

提前致谢。

编辑:

占位符约束允许您通过,但强制您更改运行时约束的优先级,并触发冲突约束的 IB/布局错误和警告,尽管在冲突的仅设计时约束上选择了占位符复选框.

【问题讨论】:

    标签: ios objective-c xcode swift autolayout


    【解决方案1】:

    UITableviewController 与静态单元格一起使用。这些单元格将是您的内容视图。

    您可以在 IB 中向下滚动 tableview 以查看底部的单元格,并且您会获得一个很好的额外行为,例如在打开键盘时将视图滚动到正确的位置,这样它就不会隐藏您单击的文本字段。

    而且您根本不必担心滚动视图。

    如果您想重用您的内容视图,您当然可以使表格动态化并通过代码提供内容视图。

    【讨论】:

    • 这是我提出的问题的一个很好的答案。我可能减少了太多,因为在我只有一个超大场景的其他情况下我会遇到这个问题。您的观点对于我上面描述的多个子视图来说是一个很好的观点 - 谢谢。
    • 即使有一个“超大场景”,您也可以只使用一个大单元格并从 uitableviewcontroller 获得内置的滚动行为。但也许您会找到更适合您需求的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多