기술 스택 정리하기 세 번째 : SnapKit
스냅킷은 iOS 앱 개발 시 핵심 요소인 오토 레이아웃을 조금 쉽게 사용할 수 있게 만들어진 라이브러리이다.
기존의 오토레이아웃 코드는 길고, 생각보다 복잡했다.
그래서 SnapKit을 사용하는 곳들이 많은 상황이다.
// MARK: - UI 세팅
func settingUI() {
// 타이틀
view.addSubview(plusTitleLabel)
plusTitleLabel.snp.makeConstraints {
$0.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(10)
$0.left.equalTo(view.safeAreaLayoutGuide.snp.left).offset(20)
}
// 텍스트 입력 창
view.addSubview(writingTextView)
writingTextView.snp.makeConstraints {
$0.centerX.equalToSuperview()
$0.height.equalTo(150)
$0.leading.equalTo(view.safeAreaLayoutGuide.snp.leading)
$0.trailing.equalTo(view.safeAreaLayoutGuide.snp.trailing)
$0.centerY.equalToSuperview().offset(100)
}
. . .
}
이렇게 뷰를 생성하고 난 뒤에, 뷰에서의 크기나 위치를 지정할 때 SnapKit을 사용하면 기존에 존재했던 오토레이아웃 코드보다 훨씬 깔끔하게 코드를 작성할 수 있다.
SnapKit의 몇가지 기능들만 알아보자.
makeConstraints 를 통해 해당 view의 오토 레이아웃을 생성할 수 있다.
view1.snp.makeConstraints { (make) -> Void in
self.topConstraint = make.top.equalTo(superview).offset(padding.top).constraint
make.left.equalTo(superview).offset(padding.left)
}
Alternative if you are only updating the constant value of the constraint you can use the method snp.updateConstraints
instead of snp.makeConstraints
제약 조건의 상수 값만 업데이트 하는 경우 makeConstraints
, 대신 updateConstraints
를 사용할 수 있다.
override func updateConstraints() {
self.growingButton.snp.updateConstraints { (make) -> Void in
make.center.equalTo(self);
make.width.equalTo(self.buttonSize.width).priority(250)
make.height.equalTo(self.buttonSize.height).priority(250)
make.width.lessThanOrEqualTo(self)
make.height.lessThanOrEqualTo(self)
}
위 코드는 실제 필자 과제에 적용을 해보고 싶었지만, 어떤 이유에서인지 에러가 많이 났었다. 아마도 크기나 길이 정도만 바꾸는 용도로 사용할 수 있나보다.
snp.remakeConstraints
is similar to snp.makeConstraints
, but will first remove all existing constraints installed by SnapKit.
remakeConstraints
는 makeConstraints
와 유사하다. 하지만 먼저 SnapKit으로 정의된 모든 Constraints를 제거한다.
func changeButtonPosition() {
self.button.snp.remakeConstraints { (make) -> Void in
make.size.equalTo(self.buttonSize)
if topLeft {
make.top.left.equalTo(10)
} else {
make.bottom.equalTo(self.view).offset(-10)
make.right.equalTo(self.view).offset(-10)
}
}
}
이렇게 remakeConstraints 비슷한 행동을 하긴 하지만, 이미 정의 되어있는 것을 다 지우고 새로 적용하는 것에서 다른 점을가지고 있다.
이렇게 오토 레이아웃을 쉽게 사용할 수 있는 SnapKit에 대해 알아보았다.