UIStackView:控制间距

UIStackView: control of spacing

我需要在水平 UIStackView 中有 X 个按钮,它位于 UIScrollView 中。要求是按钮应该均匀分布在堆栈视图中,并且随着按钮数量的增加我应该减少间距以使它们适合屏幕的宽度,但是有一个最小间距,当间距减小并达到最小间距,按钮可以超出屏幕宽度。

例如,当我有三个按钮时,我想像这样布局它们

|B1 B2 B3|

当我有五个按钮时(假设它们仍然可以以较小的间距适应屏幕的宽度):

|B1 B2 B3 B4 B5|

但是当我有六个按钮并且必须保持最小间距时,我想堆叠视图以在其容器内滚动 UIScrollView

查看 UIStackView 的 doco,属性 spacing 是:

"The spacing property determines the minimum spacing between arranged views."

所以我可以将它用于最小间距要求,但是对于我有三个项目的第一个示例,我想我需要定义堆栈视图的大小和位置,如 doco 中所述:

"Define the stack’s size along its axis. In this case, pin both edges of the stack along it’s axis to its superview, defining the stack view’s size in that dimension. You also need to pin one of the other edges to define the stack view’s position. The stack view sizes and positions its content along its axis to fill the defined space; however, the unpinned edge moves freely, based on the size of the largest arranged view."

但现在的问题是:

  1. 如何布局三个按钮,一个在左边缘,一个在中间,一个在右边缘?
  2. 当我有更多项目无法适应屏幕宽度时,我如何确定我应该将堆栈视图的右边缘固定到它的右侧superview,所以它的大小可以增长?

谢谢!

这个其实很简单

对于自动版式中的任何项...

(如果它是一个堆栈视图,或者只是一个普通视图,那根本没有区别。所以首先,教你自己使用普通视图来做到这一点。)

您的意思是您希望视图 当然,与父视图一样宽。但是,再宽一点也可以。

你所做的一切都在你的榜样中, - 附加左边缘 - 不要附加右边缘 - 设置宽度相等,但实际上,选择“>=”选项。

就这么简单!

这将在您的堆栈视图情况下完美运行。

(当然,在stack view上简单地select "fill":这样在只有几个的情况下会"space them out"。注意,当然,很明显,您必须将滚动视图合并到项目中,如果这是您想要的 "off on the right"。)