14

I want to make a UIView rectangular with SnapKit in Swift, like this

lazy var customView: UIView = {
        let view = UIView(frame: CGRect())
        self.addSubview(view)
        view.snp.makeConstraints({ (make) in
            make.left.top.bottom.equalToSuperview().inset(self.inset)
            make.width.equalTo(make.height)  // Error in this line
        })
        return view
    }()
Khoren Markosyan
  • 208
  • 1
  • 2
  • 7

3 Answers3

28

You have to use view.snp.height instead of make.height:

lazy var customView: UIView = {
    let view = UIView(frame: CGRect())
    self.addSubview(view)
    view.snp.makeConstraints({ (make) in
        make.left.top.bottom.equalToSuperview().inset(self.inset)
        make.width.equalTo(view.snp.height) // <---
    })
    return view
}()
d.felber
  • 5,288
  • 1
  • 21
  • 36
4

If you have 2 view on same superview, you can do next:

    view1.snp.makeConstraints { (make) in
        make.leading.equalToSuperview()
        make.bottom.equalToSuperview()
        make.top.equalToSuperview()
    }

    view2.snp.makeConstraints { (make) in
        make.trailing.equalToSuperview()
        make.bottom.equalToSuperview()
        make.top.equalToSuperview()
        make.leading.equalTo(view1.snp.trailing)
        make.width.equalTo(view1.snp.width)
    }

and result

enter image description here

In same manner, using view.snp.width or view.snp.height you can setup equality of views using SnapKit

hbk
  • 10,908
  • 11
  • 91
  • 124
-1
    view.snp.makeConstraints({ (make) in
        make.left.top.bottom.equalToSuperview().inset(self.inset)
        make.width.equalTo(view.snp.height) 
    })
Blanke
  • 9