728x90
AutoLayout 코드로 그리기
기존에 storyboard 기반으로 짰던 UI를 코드만으로 작성해보겠습니다.
여기서 핵심은
1. 해당 뷰의 x, y 위치
2. 해당 뷰의 가로, 세로 크기
입니다.
3가지 방법으로 나누어 설명하겠습니다.
1. 뷰 인스턴스 생성
myFirstView 인스턴스를 생성하고,
x축과 y축 위치, 가로 세로 크기를 설정해줍니다.
let myFirstView = UIView()
myFirstView.translatesAutoresizingMaskIntoConstraints = false
myFirstView.backgroundColor = .systemPink
self.view.addSubview(myFirstView)
// x축, y축 위치
myFirstView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
myFirstView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 100).isActive = true
// 뷰의 가로세로, 크기 제공
myFirstView.widthAnchor.constraint(equalToConstant: 200).isActive = true
myFirstView.heightAnchor.constraint(equalToConstant: 200).isActive = true
myFirstView.layer.cornerRadius = 30
2. 클로저로 뷰를 설정
클로저로 뷰를 먼저 선언해주고,
addSubView에 constraint를 잡아줍니다.
// 클로저로 뷰를 설정
var mySecondView : UIView = {
let view = UIView()
view.backgroundColor = #colorLiteral(red: 0.5843137503, green: 0.8235294223, blue: 0.4196078479, alpha: 1)
view.layer.cornerRadius = 16
view.translatesAutoresizingMaskIntoConstraints = false
view.clipsToBounds = true
return view
}()
self.view.addSubview(mySecondView)
NSLayoutConstraint.activate([
mySecondView.widthAnchor.constraint(equalToConstant: 100),
mySecondView.heightAnchor.constraint(equalToConstant: 100),
mySecondView.leadingAnchor.constraint(equalTo: myFirstView.leadingAnchor, constant: 10),
mySecondView.topAnchor.constraint(equalTo: myFirstView.bottomAnchor, constant: 50)])
3. 커스텀 뷰 설정
새로운 MyCircleView.swift 파일을 생성해주고,
생성한 view파일을 가져와 사용합니다.
import Foundation
import UIKit
class MyCircleView: UIView{
override func layoutSubviews() {
super.layoutSubviews()
print("MyCircleView - layoutSubviews() called")
self.layer.cornerRadius = self.frame.height / 2
}
}
var myThirdView : MyCircleView = {
let circleView = MyCircleView()
circleView.backgroundColor = #colorLiteral(red: 0.9686274529, green: 0.78039217, blue: 0.3450980484, alpha: 1)
circleView.translatesAutoresizingMaskIntoConstraints = false
return circleView
}()
self.view.addSubview(myThirdView)
NSLayoutConstraint.activate([
myThirdView.widthAnchor.constraint(equalTo: mySecondView.widthAnchor, multiplier: 1.5),
myThirdView.heightAnchor.constraint(equalTo: mySecondView.heightAnchor, multiplier: 1.5),
myThirdView.topAnchor.constraint(equalTo: mySecondView.bottomAnchor, constant: 50),
myThirdView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
])
Preview
코드로 레이아웃을 짤때 바로바로 UI 확인을 못하는 점이 불편한데, Preview를 이용하면 빠르게 확인이 가능합니다.
이 방법은 코드는 UIkit을 이용하고, Preview(미리보기)만 swiftui를 이용해서 보는 것입니다.
단축키
- 미리보기 창 열기 : option + command + enter
- 미리보기 돌리기 : option + command + p
#if DEBUG
import SwiftUI
struct ViewControllerRepresentable: UIViewControllerRepresentable {
// update
func updateUIViewController(_ uiViewController: UIViewController, context: Context){
}
// makeui
@available(iOS 13.0, *)
func makeUIViewController(context: Context) -> UIViewController {
ViewController()
}
}
struct ViewController_Previews: PreviewProvider {
static var previews: some View{
ViewControllerRepresentable().previewDisplayName("아이폰 11")
}
}
#endif
[출처]
728x90
'iOS' 카테고리의 다른 글
[iOS] Frame & Bounds (0) | 2022.01.20 |
---|---|
[iOS] Snapkit 라이브러리로 AutoLayout 잡기 (0) | 2021.12.30 |
[iOS] MVVM 패턴 정리 (0) | 2021.12.27 |
[iOS] FSCalendar 라이브러리 정리 (1) | 2021.10.13 |
[iOS] 텍스트 delegate 정리 (0) | 2021.10.05 |