UIStackView:控制间距

时间:2017-04-05 23:46:13

标签: ios objective-c uiscrollview uistackview

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

例如,当我有三个按钮时,我想将它们布局为

|B1 B2 B3|

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

|B1 B2 B3 B4 B5|

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

查看UIStackView的doco,属性spacing是:

" spacing属性确定排列视图之间的最小间距。"

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

&#34;沿着轴定义堆栈的大小。在这种情况下,将堆栈的两个边沿其轴线固定到其超视图,从而在该维度中定义堆栈视图的大小。您还需要固定其他边之一以定义堆栈视图的位置。堆栈视图沿其轴定义和定位其内容以填充定义的空间;但是,未固定的边缘会根据最大排列视图的大小自由移动。&#34;

但现在的问题是:

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

1 个答案:

答案 0 :(得分:1)

这实际上很容易。

对于autolayout中的任何项...

(如果它是一个堆栈视图,或者只是一个普通的视图,它没有任何区别。所以首先,教你自己使用普通视图来做这件事。)

你所说的是你希望视图肯定是,和superview一样宽。但是,扩大范围是可以的。

你所做的只是你的榜样, - 附上左边缘 - 不要连接右边缘 - 设置宽度相等,但事实上,选择“&gt; =”选项。

就这么简单!

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

(当然,只需在堆栈视图中选择“填充”:这样,在只有少数几个的情况下,它会“将它们分开”。请注意,当然显然,你必须加入滚动视图到项目中,如果这是你想要的“右边”。)