有没有办法在 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 中的 UIHorizontalStackView。
但是,我遇到了一个错误(如第二张附图所示)。
-
您没有为 "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 所需的布局灵活性。
我正在开发具有以下结构的 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 中的 UIHorizontalStackView。
但是,我遇到了一个错误(如第二张附图所示)。
-
您没有为 "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 所需的布局灵活性。