ios - UIStackView:控制间距

标签 ios objective-c uiscrollview uistackview

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

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

|B1 B2 B3|

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

|B1 B2 B3 B4 B5|

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

查看UIStackView的doco,属性spacing为:

“spacing 属性决定排列 View 之间的最小间距。”

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

“定义堆栈沿其轴的大小。在这种情况下,将堆栈沿​​其轴的两个边缘固定到其父 View ,定义该维度中堆栈 View 的大小。您还需要固定其他边缘之一以定义堆栈 View 的位置。堆栈 View 会调整其内容的大小并沿其轴定位其内容以填充定义的空间;但是,未固定的边缘会根据最大排列 View 的大小自由移动。”

但是现在的问题是:

  1. 如何布局三个按钮,一个在左边缘,一个在中间,一个在右边缘?
  2. 当我有更多无法适应屏幕宽度的项目时,我如何确定我是否应该将堆栈 View 的右边缘固定到其父 View 的右侧,因此它的大小可以成长吗?

谢谢!

最佳答案

这其实很简单。

对于自动布局中的任何项目...

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

您的意思是您希望 View 肯定与父 View 一样宽。但是,再宽一点也没关系。

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

就这么简单!

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

(当然,只需在堆栈 View 上选择“填充”:这样它会在只有少数的情况下“将它们隔开”。请注意,当然很明显,您必须合并项目的 ScrollView ,如果这是您在“右侧关闭”时想要的。)

关于ios - UIStackView:控制间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43243384/

相关文章:

iphone - 如何使用嵌入式 HTML 检查 youtube 视频是否存在

ios - 在非视网膜设备中创建 0.5px uiview 边框

html - 移动网页布局不一致问题

iphone - 在单独的线程中做什么?

ios - 单点触控 : ResignFirstResponder() issues

ios - iOS 8 Today 扩展中的拖动手势

ios - 更改 UIScrollview 的框架在 iOS xcode 中不起作用

ios - 从字典中提取值的神奇方法

objective-c - ARC __bridge cast Block_copy 和 Block_release

iphone - popToRootController 不工作