如何使用自动布局在对象之间创建间隙

Posted

技术标签:

【中文标题】如何使用自动布局在对象之间创建间隙【英文标题】:How to use auto layout to create a gap between objects 【发布时间】:2019-03-04 15:13:13 【问题描述】:

我的代码具有 UITextField 和 UITableView。我希望我的代码使用 AutoLayout 在文本字段和表格视图之间创建一个小间隙。现在,如果代码的位置在 iPhone 模式下运行良好,但如果它在 iPad 中,则文本字段将打印在 tableview 上。您可以在下面的照片中看到我正在处理的内容:

hitsLabel.topAnchor.constraint(equalTo: view.centerYAnchor, constant: -250)
hitsLabel.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant: 150)
hitsLabel.widthAnchor.constraint(equalToConstant: 120)
hitsLabel.heightAnchor.constraint(equalToConstant: 40)

theScores.topAnchor.constraint(equalTo: view.topAnchor, constant: 300)
theScores.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
theScores.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0)
theScores.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0)

【问题讨论】:

hitsLabel 是你的文本字段吗? 是的,这就是文本字段 您在视图中垂直居中文本字段,并且似乎没有在表格视图和文本字段之间设置任何约束,因此它当然会显示在表格视图的顶部。如果想要表格上方的文本域,则需要在文本域底部和 tableview 顶部之间创建一个约束。 没错,我就是这么想的,但我不知道如何编码 【参考方案1】:

我会建议这样的事情:

hitsLabel.topAnchor.constraint(equalTo: view.topAnchor, constant : 100),
hitsLabel.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
hitsLabel.widthAnchor.constraint(equalToConstant: 120),
hitsLabel.heightAnchor.constraint(equalToConstant: 40),
theScores.topAnchor.constraint(equalTo: hitsLabel.bottomAnchor, constant: 100),
theScores.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0),
theScores.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0),
theScores.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0),

这会将文本字段放置在距视图顶部 100 像素的位置,然后 tableView 的顶部将距文本字段底部 100 像素。

我建议也为文本字段的左侧添加约束

【讨论】:

以上是关于如何使用自动布局在对象之间创建间隙的主要内容,如果未能解决你的问题,请参考以下文章

UIStackViews 之间的自动布局最小间隙

使用自动布局隐藏视图和相邻间隙

使用自动布局将对象均匀分开

如何使用自动布局水平设置三个按钮而没有间隙

自动布局不垂直添加间隙

使用自动布局实现按钮的网格布局