有没有办法在 UIStackView 中嵌入 UIScrollView?

Is there a way to embed a UIScrollView within a UIStackView?

我正在开发具有以下结构的 ViewController:

-ViewController
 -UIScrollView
  -UIVerticalStackView
    -UIImageView (414:367 aspect ratio)
    -UILabel
    -UIScrollView
     -UIHorizontalStackView
      -Dynamically added UIButtons
    -UILabel
    -UITextView
    -UIButton

ViewController 上的元素多于屏幕无法容纳的元素,这就是我希望能够垂直滚动元素的原因。但是,其中一个元素将动态包含 generated/added UIButton。因为 UIButtons 的数量可能超过屏幕的宽度,所以我希望将这些 UIButtons 嵌入到 UIScrollView 中,使用户能够在需要时水平滚动它们,因此使用内部 UIScrollView。出于格式化目的,我将 UIButtons 添加到嵌套在内部 UIScrollView 中的 UIHorizo​​ntalStackView。

但是,我遇到了一个错误(如第二张附图所示)。

-

您没有为 "inner scroll view" 中包含的 "inner stack view" 提供任何约束。

您最可能想要的是 "inner stack view" 具有与 "inner scroll view" 相同的高度但没有宽度限制,允许您动态添加的按钮从左到右填充,然后水平滚动当太多放不下的时候。

所以:

您可以在此图像中看到 "inner stack view" 在所有 4 个边上都被限制为 "inner scroll view" 并且 约束为宽度和高度:

Inner Stack View.height = height
Inner Stack View.width = width

height = 100是"inner scroll view"的高度限制)

这里看不到的是您并不是真的想要宽度限制 - 您希望堆栈视图 "fill with buttons" 并在需要时水平延伸超过右边缘。

为此,select Inner Stack View.width = width 约束,并将其设置为 Placeholder / Remove at build time:

这将使 IB / Storyboard 满意(满足所有必要的约束),但会为您提供 run-time 所需的布局灵活性。