带有 StackView 的 ScrollView 和固定的页脚在外面

ScrollView with StackView and fixed footer outside

Xcode 10,Swift 5(这应该完全可以在故事板中实现)

当前布局:

- ChildView (child View of very first default view)
    - ButtonView
        - ScrollView
            - VerticalStackView
                - Button
                - Button
                - ...
    - FooterView
         - HorizontalStackView
            - Button A
            - Button B

我需要什么限制才能始终将页脚视图保持在底部并使 UIStackView 滚动到它后面,同时仍然为 UIStackView 中的每个按钮保持固定高度?

这个设置似乎有很多问题,从里面的按钮不可点击(或 UITextField 无法交互),到 UIScrollView 不可滚动或 "Content Size Ambiguity" 错误(描述为 here)- 只是因为没有正确设置单个约束。

结果:

如果可以同时显示的按钮较少,它将无法滚动,而是只在最后一个按钮下方显示黑色背景。

如何到达:

使用预览下方的 "add new constraints" 按钮设置约束 window。

子视图:

  • Trailing/Leading/Bottom:0 到 Superview
  • 等高:到安全区域:
    • Control-drag 从 ChildView 到安全区并选择 "Equal Heights"

1.页脚视图:

  • Trailing/Leading/Bottom:0 到 Superview
  • 身高:等于 50
  • 顶部到 ButtonView:
    • Control-drag 从 FooterView 到 ButtonView
    • 选择"Top"
    • 单击新约束以在检查器中将其打开(FooterView.Top 等于 ButtonView.Bottom)

2。按钮视图:

  • Trailing/Leading/Top:0 到 Superview
  • 底部到 FooterView(上面已经解释过)

2.1。 ScrollView(黑色):

  • Trailing/Leading/Bottom/Top: 0 到 Superview
  • Bottom/Top 约束使 ScrollView 远离 "spilling over"

2.1.1。垂直堆叠视图:

  • Alignment/Distribution: 填充
  • Trailing/Leading/Bottom/Top: 0 到 Superview
  • 与 ButtonView 等宽:
    • Control-drag 从 VerticalStackView 到 ButtonView 并选择 "Equal Widths"
    • 这将禁用 ScrollView 的水平滚动条

2.1.1.1。按钮(灰色):

  • 身高:50
  • VerticalStackView 会处理剩下的事情

当然,您也可以将 'UIScrollView' 中的按钮替换为视图以创建某种类型的表单。