【问题标题】:Can two views be spaced using each other in SnapKit?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)
    }

【问题讨论】:

    标签: swift snapkit


    【解决方案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 的好建议绝对是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多