코드로 뷰에 label이나 button을 추가해주는 작업입니다.
let titleLabel: UILabel = {
let label = UILabel()
label.text = ""
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
let backButton: UIButton = {
let button = UIButton()
button.setTitle("Back Button", for: .normal)
button.setTitleColor(.systemBlue, for: .normal)
button.addTarget(self, action: #selector(tapBackButton), for: .touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
이 때 label이든 button이든 translateAutoresizingMaskintoConstraints를 꼭 false로 지정해줘야합니다.
뷰의 자동 크기 조정 메서드에 지정된 값을 복제하여 제약조건을 생성하는 것입니다.
뷰의 크기와 위치를 완전 지정해버리기 때문에 추가적으로 제약을 넣어줄 수 없습니다.
따라서 우리가 제약을 지정하고 조정하고 싶다면, translateAutoresizingMaskIntoContraints = false로 꼭 명시해 주어야합니다.(default로 true로 설정되어있습니다.)
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.view.addSubview(titleLabel)
self.view.addSubview(backButton)
제약을 넣어주기 전에 꼭 addSubview를 해줘야합니다. 순서가 바뀌면 실행이 안됩니다.
constraint 설정은 다음을 사용하여 할 수 있습니다.
나라별로 텍스트의 시작점이 다르기 때문에 left,right보다 leading, trailing을 사용하는 것이 좋습니다.
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.view.addSubview(titleLabel)
self.view.addSubview(backButton)
self.backButton.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 100).isActive = true
self.backButton.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 50).isActive = true
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.view.addSubview(titleLabel)
self.view.addSubview(backButton)
let safeArea = self.view.safeAreaLayoutGuide
self.backButton.topAnchor.constraint(equalTo: safeArea.topAnchor, constant: 50).isActive = true
self.backButton.leadingAnchor.constraint(equalTo: safeArea.leadingAnchor, constant: 20).isActive = true
self.titleLabel.trailingAnchor.constraint(equalTo: safeArea.trailingAnchor, constant: -50).isActive = true
self.titleLabel.bottomAnchor.constraint(equalTo: safeArea.bottomAnchor, constant: -100).isActive = true