如何正确地将安全区域插图添加到 UIStackView?
Posted
技术标签:
【中文标题】如何正确地将安全区域插图添加到 UIStackView?【英文标题】:How to correctly add safe area inset to UIStackView? 【发布时间】:2022-01-20 20:52:05 【问题描述】:所以我有一个简单的堆栈视图,里面有两个文本,并且我添加了安全区域约束,
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = .white
let label = UILabel()
label.text = "Hello, World!"
label.sizeToFit()
label.translatesAutoresizingMaskIntoConstraints = false
let label2 = UILabel()
label2.text = "Hello, World!"
label2.sizeToFit()
label2.translatesAutoresizingMaskIntoConstraints = false
let stackView = UIStackView()
stackView.axis = .vertical
stackView.addArrangedSubview(label)
stackView.addArrangedSubview(label2)
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
])
但它在两个文本之间有很大的空间。如何删除该空间?仅当我添加此行 stackView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
时才会发生这种情况。
【问题讨论】:
尝试给出底部约束 >=stackView.bottomAnchor.constraint(greaterThanOrEqualTo: view.safeAreaLayoutGuide.bottomAnchor)
@RajaKishan 不幸的是,这没用。
堆栈视图有什么用?只需直接定位您的标签。
@matt 我正在使用堆栈视图来定位。直接定位很痛苦,因为据我所知,我必须为每个标签添加约束。
【参考方案1】:
问题在于 StackView 正在制作它,因此其中的元素平等地填充了空间。 尝试设置:stackView.distribution = .fill 这是一篇关于 StackView 如何工作以及为什么会发生这种情况的文章:https://spin.atomicobject.com/2016/06/22/uistackview-distribution/
【讨论】:
这不会产生影响,因为它只会将标签移向底部。第一个标签将位于屏幕中间,第二个标签位于底部以上是关于如何正确地将安全区域插图添加到 UIStackView?的主要内容,如果未能解决你的问题,请参考以下文章
如何正确地将 UITextField 添加到 UITableViewCell
如何正确地将 Kal 框架添加到我的 iPhone 项目中?