UIStackView 表单布局

Posted

技术标签:

【中文标题】UIStackView 表单布局【英文标题】:UIStackView Form Layout 【发布时间】:2015-10-07 16:10:40 【问题描述】:

我正在创建一个包含各种字段的基本表单。我想使用UIStackView 来布局所有控件。我将如何执行以下操作以使控件正确对齐? UIStackView 是正确的方法吗?

【问题讨论】:

【参考方案1】:

Apple suggests 为每个标签和字段创建水平堆栈视图,然后将它们放在垂直堆栈视图中。

这是有道理的,因为如果您稍后将其中一个控件更改为不同的控件(例如弹出按钮),您可以保持标签和控件基线对齐。

【讨论】:

【参考方案2】:

您绝对可以使用 StackViews 来实现这一点。

如何排列 StackView 取决于您希望如何管理对齐方式。

以下是我的建议:

    将您的标签放在一个垂直对齐的堆栈视图中,然后 将您的文本字段放在另一个垂直对齐的堆栈视图中 将两个堆栈视图放在一个水平对齐的堆栈视图中

您可能希望将distribution 设置为在两个较小的stackview 上平均填充,然后将spacing 设置为对于每个较小的stackview 都相同。 最后,您将能够在水平堆栈视图上设置间距,以设置文本和文本字段之间的间距。(最后一部分是我将它们设置成这样的原因。)

【讨论】:

我认为这完全符合我的问题的要求。如果布局有点复杂怎么办?假设有一条视觉线将两行分开。然后呢? 然后我将有两个包含您的文本和文本字段的水平堆栈视图,以及一个包含所有元素(堆栈视图、分隔符、堆栈视图)的垂直堆栈视图。您仍然可以达到相同的效果,只是稍微不那么优雅。另外,如果它满足您的问题,您介意接受答案吗?干杯! 完成。当这样拆分时,如何控制左侧空间以使文本字段正确排列? 对所有文本字段设置相同的宽度限制。 @RobNorback 如何处理键盘向上事件。如果有提交按钮,我希望它始终位于键盘上方。

以上是关于UIStackView 表单布局的主要内容,如果未能解决你的问题,请参考以下文章

UIStackView 嵌入在 UIStackView 对齐中

UIStackView 会工作吗?

使用 UINavigationController 时 UIStackView 无法设置底部约束

使用 UIStackView 时,UIImageView 在 UITableViewCell 内被挤压

Swift:扩展 UIStackView 以创建居中的标签列表

iOS布局-UIStackView