AppDelegate 파일 내에서 뷰 컨트롤러 이름 선택 - 우클릭 - Refactor - Rename
Xcode 프로젝트에는 우리에게 쓸모없는 파일들이 많이 있다. 이런 파일들을 정리해주기 위해 새 그룹을 만들어준다. 프로젝트 폴더를 우클릭하고 New Group without Folder 를 선택해준다. (New Group without Folder는 파일들을 정리하기 위한 가상의 디렉토리를 만들어준다.
AppDelegate와 ViewController 파일을 제외한 모든 파일들을 Files 그룹에 넣어준다.
이번에는 New Group with Folder을 선택해서 실제 물리적인 폴더를 생성한다. 이후 그룹명을 Login으로 바꾸고 LoginViewController 파일을 Login 그룹 안에 넣어준다. 이 그룹 안에는 로그인과 관련된 파일들이 저장될 것이다.
LoginView.swift
파일 안에 다음과 같이 코드를 작성한다.
import Foundation
import UIKit
class LoginView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
style()
layout()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override var intrinsicContentSize: CGSize {
return CGSize(width: 200, height: 200)
}
}
extension LoginView {
func style() {
translatesAutoresizingMaskIntoConstraints = false
}
func layout() {
}
}
custom view 또는 auto layout 관련 작업을 할 때는 반드시 translateAutoresizingMaskIntoConstrains = false
코드를 추가해주어야 한다.
import UIKit
class LoginViewController: UIViewController {
let loginView = LoginView()
override func viewDidLoad() {
super.viewDidLoad()
style()
layout()
}
}
extension LoginViewController {
private func style() {
loginView.translatesAutoresizingMaskIntoConstraints = false
}
private func layout() {
view.addSubview(loginView)
}
}
layout 메소드에서 NSLayoutConstraint.activate([])
메소드를 호출해준다. 이 메소드는 파라미터로 받는 배열 안에 있는 constraints를 모두 활성화(isActive)시켜준다.
NSLayoutConstraint.activate 메소드를 다음과 같이 채워준다.
NSLayoutConstraint.activate([
loginView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
loginView.leadingAnchor.constraint(equalToSystemSpacingAfter: view.leadingAnchor, multiplier: 1),
view.trailingAnchor.constraint(equalToSystemSpacingAfter: loginView.trailingAnchor, multiplier: 1)
])