具有StackView和外部固定页脚的ScrollView

时间:2019-06-14 12:48:19

标签: ios uiscrollview autolayout footer uistackview

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

当前布局:

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

我需要始终保持页脚视图在底部并使UIStackView在其后滚动,同时仍为UIStackView中的每个按钮保持固定高度的哪些约束条件?

1 个答案:

答案 0 :(得分:1)

此设置似乎引起了许多问题,从内部的按钮不可点击(或UITextField无法交互)到UIScrollView不可滚动或“内容大小”歧义”错误(描述为here)-仅仅是因为单个约束设置不正确。

结果:

enter image description here

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

如何到达那里:

使用预览窗口下方的“添加新约束”按钮设置约束。

enter image description here

ChildView:

  • 尾随/领先/底部:0到Superview
  • 等高:至安全区域:
    • 按住Control键将其从ChildView拖动到安全区域,然后选择“相等高度”

1。 FooterView:

  • 尾随/领先/底部:0到Superview
  • 高度:等于50
  • ButtonView的顶部:
    • 按住Control键从FooterView拖动到ButtonView
    • 选择“顶部”
    • 单击新约束以在检查器中将其打开(FooterView.Top等于ButtonView.Bottom)

enter image description here

2。 ButtonView:

  • 落后/领先/领先:0到Superview
  • 从底部到FooterView(已在上面进行了解释)

2.1。 ScrollView(黑色):

  • 追踪/领先/底部/顶部:0到Superview
  • 底部/顶部约束使ScrollView不会“溢出”

2.1.1。 VerticalStackView:

  • 对齐方式/分布:填充
  • 追踪/领先/底部/顶部:0到Superview
  • 等于ButtonView的宽度:
    • 按住Control键从VerticalStackView拖动到ButtonView,然后选择“相等宽度”
    • 这将禁用ScrollView的水平滚动条

2.1.1.1。按钮(灰色):

  • 高度:50
  • VerticalStackView负责其余的工作

当然,您也可以将“ UIScrollView”中的按钮替换为视图以创建某种形式的表单。