이번 프로젝트에서 코드로 UI를 짜게되면서, 가장 복잡하다고 느꼈던 부분이 AutoLayout를 주는 부분이었다. 스토리보드에서는 간단하게 주었는데, 코드에서는 계속 길어지는 것이다. 그러다가 SnapKit이라는 라이브러리를 알게되어 좀 더 간결하게 표현할 수 있었다.
SnapKit은 Swift 언어를 위한 Auto Layout 라이브러리 중 하나로, iOS 및 macOS 애플리케이션 개발에 사용된다. SnapKit을 사용하면 코드를 통해 간편하게 Auto Layout 제약 조건을 정의할 수 있어서 인터페이스 구성을 더 쉽게 할 수 있다. 이 라이브러리는 코드 기반의 UI 개발을 더 직관적이고 유지보수가 쉬운 방식으로 제공한다.
SnapKit의 주요 특징과 동작 방식이다.
보통의 라이브러리들은 General에서 추가할 수 있다.
라이브러리의 GitHub 주소로 추가하는 것이 일반적이다.
연결시키고 싶은 라이브러리의 URL을 입력하자.
SnapKit 라이브러리의 GitHub이다.
복사한 주소를 입력하면, 해당 라이브러리가 뜬다.
Add Package를 클릭하면 추가가 된다.
이제 자신이 사용하고 싶은 파일에 import 시켜주면 된다.
import SnapKit
NSLayoutConstraint을 사용한 경우에 TableView의 AutoLayout을 설정한 형태다.
private func autoLayout() {
// NSLayoutConstraint을 사용한 경우
NSLayoutConstraint.activate([
mainTableView.topAnchor.constraint(equalTo: self.view.topAnchor),
mainTableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
mainTableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
mainTableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor),
mainTableView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
mainTableView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)
])
}
이제 SnapKit을 이용한 경우다.
private func autoLayout() {
// Snapkit을 사용한 경우
mainTableView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.leading.equalTo(view.snp.leading)
make.trailing.equalTo(view.snp.trailing)
make.bottom.equalTo(view.snp.bottom)
make.centerX.equalTo(view.snp.centerX)
make.centerY.equalTo(view.snp.centerY)
}
}
NSLayoutConstraint을 사용한 경우에 TableViewCell의 AutoLayout을 설정한 형태다.
private func autoLayout() {
// NSLayoutConstraint을 이용한 경우
let margin: CGFloat = 8
NSLayoutConstraint.activate([
checkButton.centerYAnchor.constraint(equalTo: self.centerYAnchor),
checkButton.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 16),
checkButton.widthAnchor.constraint(equalToConstant: 20),
checkButton.heightAnchor.constraint(equalToConstant: 20),
memoLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor),
memoLabel.leadingAnchor.constraint(equalTo: checkButton.trailingAnchor, constant: margin),
memoLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -16)
])
}
이제 SnapKit을 이용한 경우다.
private func autoLayout() {
// Snapkit을 이용한 경우
checkButton.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalToSuperview().offset(16)
make.width.height.equalTo(20)
}
memoLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.leading.equalTo(checkButton.snp.trailing).offset(8)
make.trailing.equalToSuperview().offset(-16)
}
}