iOS/UIKit
[UIKit] autolayout, code base UI
임구마🍠
2023. 11. 11. 02:02
autolayout
레이아웃을 자동으로 계산해준다!
핵심
1. 뷰의 위치
- 가로 [x축]
- 세로 [y축]
- 앵커로 제공
2. 뷰의 크기
- 가로, 세로
- 앵커기반 스크린사이즈로 뷰의 크기 제공가능
위치 + 크기 -> autolayout -> 화면 렌더링
앵커를 왼쪽, 오른쪽에 설정하고 고정 너비를 주면 오류,,
왜냐! 앵커를 기준으로 계산해서 그리는데 고정 너비 값 때문에 충돌이 나기 때문임
코드로 autolayout 설정하기 예시
// ⭐️ 필수: 자동으로 autolayout 설정해주는 옵션 꺼주기
myView.translatesAutoresizingMaskIntoConstraints = false
// 최상위 view로 부터 top: 30, leading: 15, trailing: 15 띄우고 고정 height: 45
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 30).isActive = true
myView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15).isActive = true
myView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15).isActive = true
myView.heightAnchor.constraint(equalToConstant: 45).isActive = true
// 위와 동일한 코드 isActive 하나하나 주기 귀찮을 때
NSLayoutConstraint.activate([
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 30),
myView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 15),
myView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -15),
myView.heightAnchor.constraint(equalToConstant: 45)
])
Y축 가운데 설정
myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
모서리 둥글게 넣기
view.layer.cornerRadius = 5
view.clipsToBounds = true
// or view.layer.masksToBounds = true
클로저 형태로 속성 세팅하기
// addSubView까지 하고 싶다면 lazy 키워드 추가
private var myView: UIView = {
let view = UIView()
// 속성 세팅
return view
}()
스택 뷰 생성
private lazy var stackView: UIStackView = {
let stview = UIStackView(arrangedSubviews: [myFirstView, mySecondView, myButton])
stview.spacing = 18 // 간격 설정
stview.axis = .vertical // 정렬 축
stview.distribution = .fillEqually // 분배 설정
stview.alignment = .fill // 좌, 우, 가운데, 채우는 정렬
return stview
}()
autolayout을 동적으로 조정한 후 애니메이션 주고 싶을 때
(오토 레이아웃을 설정을 한 것을 따로 변수에 넣어 놓고 그 변수에 접근해서 나중에 변경을 시키는 형식으로 가능)
UIView.animate(withDuration: 0.3) {
self.myView.layoutIfNeeded()
}