yellowBox.translatesAutoresizingMaskIntoConstraints = false
yellowBox.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
yellowBox.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true
yellowBox.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true
yellowBox.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20).isActive = true
위와 같은 방법을 사용한다
translatesAutoresizingMaskIntoConstraints = false
메소드를 호출한 후,
Top, Bottom, Leading, Trailing 등의, constraints를 설정한다.
redBox.snp.makeConstraints { make in
make.width.height.equalTo(100)
make.top.equalTo(self.view.safeAreaLayoutGuide.snp.top)
make.centerX.equalToSuperview()
}
- 이는 아주 직관적이다. make 컴포넌트 뒤에
width
,height
,top
,bottom
등의 method를 호출할 수 있다.- 그 후,
equalTo()
메서드를 호출해서 원하는 값으로 레이아웃을 조절할 수도 있다.- SuperView에 종속된 레이아웃이라면,
equalToSuperview()
메서드를 호출해 아주 간단하게(?) (왜냐하면, self.view.centerX를 치는 것은 너무 귀찮기 때문)처리할 수 있다.
yellowBox.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
yellowBox.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true
yellowBox.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20).isActive = true
yellowBox.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -20).isActive = true
- 패딩을 넣어주는 것은 굉장히 귀찮은 일이다.
- Trailing, Bottom은 음수값을 넣어줘야하기 때문에 더더욱 귀찮다.
yellowBox.snp.makeConstraints { make in
make.edges.equalToSuperview().inset(UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20))
}
- Snapkit을 사용하면 Layout관련 작업들을 다양한 방법으로 사용할 수 있다.
inset
메서드를 호출해서 한번에 처리할 수 있다.
var greenBoxTopConstraint: Constraint? = nil
먼저 Constraint라는 Snapkit에서 지원하는 class를 선언해준다.
self.greenBoxTopConstraint = make.top.equalTo(blueBox.snp.bottom).offset(20).constraint
makeConstraints
메서드를 호출 한 후, 방금 선언한 constraint의 바꾸고자 하는 부분을 호출, 저장해준다.
@objc private func moveGreenBoxDown() {
print("viewController - moveGreenBoxDown() called / offset: \(offset)")
offset += 40
self.greenBoxTopConstraint?.update(offset: offset)
// self.greenBoxTopNSLayoutConstraint?.constant = CGFloat(offset)
UIViewPropertyAnimator(duration: 0.2, curve: .easeIn) {
self.view.layoutIfNeeded()
}.startAnimation()
}
self.greenBoxTopConstraint?.update(offset: offset)
의 코드에서 볼 수 있듯이 간단히 offset을 설정해준 후,update
메서드를 호출해주면 된다.
아주 간단히 레이아웃의 수정이 가능하다.