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()

请注意,我分别使用 leadingtrailing 而不是 leftright。这是一个很好的习惯,以防您不得不为从右到左的语言进行本地化。然后您的按钮将按照用户设备的自然顺序布局。

【讨论】:

关于 UIStackView 的好建议绝对是更好的选择。

以上是关于SnapKit 中的两个视图可以互相使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

Snapkit 和 UILabel 的轮换

Snapkit 和 TableView 中的多个自定义单元格

SnapKit 自动布局损坏:“无法同时满足约束”

用 SnapKit 构建堆叠视图的好方法是啥

我可以将 Snapchat SDK (SnapKit) 与 SwiftUI 一起使用吗?

Snapkit centerY 约束将项目居中于中心 Y 轴上方