SnapKit 中的两个视图可以互相使用吗?
Posted
技术标签:
【中文标题】SnapKit 中的两个视图可以互相使用吗?【英文标题】:Can two views be spaced using each other in SnapKit? 【发布时间】:2017-02-23 23:14:42 【问题描述】:我想在屏幕上水平放置未知数量的按钮。我想知道我是否可以根据彼此创建它们的间距。例如下面的代码可以工作吗?
let button1 = UIButton()
let button2 = UIButton()
superview.addSubview(button1)
superview.addSubview(button2)
button1.snp_makeConstraints (make) -> Void in
make.height.equalTo(100)
make.top.equalTo(50)
make.left.equalTo(superview.snp.left)
make.right.equalTo(button2.snp.right)
make.width.lessThanOrEqualToSuperview()
button2.snp_makeConstraints (make) -> Void in
make.width.lessThanOrEqualToSuperview()
make.height.equalTo(100)
make.top.equalTo(50)
make.left.equalTo(button1.snp.left)
make.right.equalTo(superview.snp.right)
【问题讨论】:
【参考方案1】:在这种情况下,您确实应该使用带有水平轴的UIStackView
。
也就是说,如果您想使用 SnapKit,有多种方法可以做到这一点。我的建议是这样的:
let count = 3 // or buttons.count if you have an array of buttons
button1.snp.makeConstraints make in
make.width.equalToSuperview().multipliedBy(1.0 / count)
make.leading.equalToSuperview()
make.top.equalToSuperview().offset(50) // or whatever
make.height.equalTo(100)
button2.snp.makeConstraints make in
make.width.top.height.equalTo(button1)
make.leading.equalTo(button1.snp.trailing)
button3.snp.makeConstraints make in
make.width.top.height.equalTo(button1)
make.leading.equalTo(button2.snp.trailing)
make.trailing.equalToSuperview()
请注意,我分别使用 leading
和 trailing
而不是 left
和 right
。这是一个很好的习惯,以防您不得不为从右到左的语言进行本地化。然后您的按钮将按照用户设备的自然顺序布局。
【讨论】:
关于 UIStackView 的好建议绝对是更好的选择。以上是关于SnapKit 中的两个视图可以互相使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
Snapkit 和 TableView 中的多个自定义单元格