【问题标题】:ScrollView width constraint with fixed width views具有固定宽度视图的 ScrollView 宽度约束
【发布时间】:2019-04-19 03:00:13
【问题描述】:

我正在使用 Swift 4 在 XCode 10 中开发一个应用程序。我已通过以下方式在 iPhone(wC、hR)的故事板中设置了我的视图:

  • 滚动视图(顶部:超级视图,底部:超级视图,尾随:安全区域,前导:安全区域)

  • 滚动视图内部是一个容器视图:T、B、L、R 到超级视图,宽度与基本视图(即屏幕)相等

  • 容器视图中有几个标签和图像视图。

我对此设置没有任何问题。

问题是当我对 iPad 进行调整时(wR,hR)。在这里,我禁用了尾随和前导约束,而是添加了 690 的宽度约束,并与超级视图水平对齐。当我这样做时,我收到一个约束错误,上面写着“不明确的可滚动内容宽度”。

我认为问题在于我相对于作为滚动视图的超级视图水平对齐,因此没有参考基本视图,但我不确定如何调整它以便它工作。

【问题讨论】:

    标签: ios uiscrollview ios-autolayout


    【解决方案1】:

    我认为您需要使用 两个“容器”视图。

    对于 iPhone(wC、hR):

    • scrollView -- Top:superview,Bottom:superview,Trailing:安全区域,Leading:安全区域)
    • scrollView 的“SuperContainerView”子视图 -- Top/Bot/Lead/Trail 到 scrollView(superView),宽度与 scrollView 相等
    • SuperContainerView 的“ContainerView”子视图 -- Top/Bot/Lead/Trail 到 SuperContainerView

    ContainerView子视图的约束会控制ContainerView的高度,它会控制SuperContainerView的高度,它会控制滚动。

    对于 iPad(wR、hR):

    • 禁用 ContainerView 的前导和尾随约束
    • 添加 690 的宽度约束
    • 为 SuperContainerView 添加一个 CenterX 约束

    结果...绿色是ContainerView,蓝色是SuperContainerView(滚动视图每边插入8):

    如果您希望在旋转到横向的手机上运行时的最大宽度为 690,则需要对 wC、hC 进行类似的约束修改

    【讨论】:

    • 完美运行。谢谢!
    【解决方案2】:

    虽然它没有多大意义,但如果您还向 Container View 添加了对齐水平和垂直中心约束(关于它的 superviewScroll View),它可能会有所帮助。

    这是根据this answer 和我自己与 AL 的斗争。

    【讨论】:

    • 尝试了这个建议,但不幸的是没有奏效。还是谢谢。