iOS/UIKit
[UIKit] : Autolayout, SnapKit 사용해보기
SeorinY
2022. 9. 20. 12:52
Swift 는 View들의 위치를 Layout으로 정해준다.
이때 Layout을 상수로 지정해주면
기기를 바꾸는 경우 원하는 상황이 연출되지 않을 것이다!
iOS 기기마다 화면 View의 크기가 다르기 때문이다
-> 이를 해결하기 위해 AutoLayout 을 사용해보자!
1. 기존의 frame을 사용한 코드를 먼저 보자
import UIKit
import Foundation
class ViewController: UIViewController{
private let testView : UIView = {
let testView = UIView()
testView.backgroundColor = .blue
return testView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(testView)
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
testView.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
}
}
이제 AutoLayout 을 적용해보자
import UIKit
import Foundation
class ViewController: UIViewController{
private let testView : UIView = {
let testView = UIView()
testView.backgroundColor = .blue
return testView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(testView)
setSubviewsLayout()
}
private func setSubviewsLayout(){
testView.translatesAutoresizingMaskIntoConstraints = false
testView.topAnchor.constraint(equalTo: view.topAnchor, constant: 100).isActive = true
testView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 100).isActive = true
testView.heightAnchor.constraint(equalToConstant: 100).isActive = true
testView.widthAnchor.constraint(equalToConstant: 100).isActive = true
}
}
위 코드같이 오토레이아웃을 설정해주고 실행시키면~
frame으로 했을 때와 같은 결과의 화면을 얻을 수 있을 것이다! 짠!
하지만.. 분명 오토레이아웃이 유용하다고 해서 사용했는데 코드가 너무 길어진 것 같은 느낌이다..
이를 해결하기 위해서 나온 것이 SnapKit이다!
https://seorin-yy.tistory.com/24
[iOS] : CocoaPods 설치, 라이브러리 (SnapKit + Then)사용하기
SnapKit, Then 등 외부라이브러리를 사용하기 위해 CocoaPods 을 설치해보자!! https://cocoapods.org CocoaPods.org CocoaPods is built with Ruby and is installable with the default Ruby available on macOS..
seorin-yy.tistory.com
위 글을 참고하여 SnapKit을 깔아주었다면
SnapKit을 사용하여 오토레이아웃 코드를 짧게 줄여보자!
import UIKit
import Foundation
import SnapKit
class ViewController: UIViewController{
private let firstView : UIView = {
let testView = UIView()
testView.backgroundColor = .blue
return testView
}()
private let secondView : UIView = {
let testView = UIView()
testView.backgroundColor = .red
return testView
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(firstView)
view.addSubview(secondView)
setSubviewsLayout()
}
private func setSubviewsLayout(){
//위의 오토레이아웃과 똑같은 결과를 가져오는 SnapKit코드이다
firstView.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(100)
make.top.equalToSuperview().offset(100)
make.width.equalTo(100)
make.height.equalTo(100)
}
//SnapKit에 대한 이해를 돕기 위해 하나의 추가 뷰를 더 작성해봤다.
secondView.snp.makeConstraints { make in
make.leading.equalTo(firstView.snp.leading)
make.top.equalTo(firstView.snp.bottom).offset(100)
make.width.equalTo(100)
make.height.equalTo(100)
}
}
}
결과 화면