코드로 UI작성 (스토리보드 제거는 하지않습니다.)
//ViewController.swift
var cluesLabel: UILabel!
override func loadView() {
view = UIView()
view.backgroundColor = .white
}
뷰가 로드되기 전 뷰컨트롤러의 view속성에 할당합니다. (UIView의 새 인스턴스를 만들고 흰색 배경색을 지정합니다.)
레이블의 속성을 설정합니다.
scoreLabel = UILabel()
scoreLabel.translatesAutoresizingMaskIntoConstraints = false
scoreLabel.textAlignment = .right
scoreLabel.text = "Score: 0"
scoreLabel.font = UIFont.systemFont(ofSize: 24)
scoreLabel.numberOfLines = 0
view.addSubview(scoreLabel)
translatesAutoresizingMaskIntoConstraints
를 false로 지정합니다.textAlignment
텍스트정렬의 위치를 지정합니다.addSubview()
: 메서드를 호출하여 뷰에 추가합니다.numberOfLines
: 텍스트가 줄바꿈할 수 있는 줄 수 (0이라면 필요한 만큼 줄바꿈)font
: 시스템폰트는 현재 iOS 사용중인 글꼴을 사용합니다.제약조건 설정하기
매번 제약조건에 isActive = true
를 여러번 사용해야 하는 경우 NSLayoutConstraint.activate()
제약 조건을 배열안에 삽입하면 편리하게 설정할 수 있습니다.
UIKit은 여러가이드를 제공합니다.
🌟 safeAreaLayoutGuide
: 둥근 모서리나 노치를 뺀 사용가능한 공간
layoutMarginsGuide
: 뷰가 화면의 왼쪽 및 오른쪽 가장자리로 실행되지 않도록 여분의 여백(margin)을 추가합니다.
NSLayoutConstraint.activate([
scoreLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
scoreLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor)
])
텍스트필드 속성
placeholder
: 사용자의 입력을 대기하는 동안 보이는 텍스트
isUserInteractionEnabled
: 사용자와 상호작용의 활성여부 ( false
라면 탭해서 텍스트입력이 불가능합니다.)
UIButton 속성
let submit = UIButton(type: .system)
submit.translatesAutoresizingMaskIntoConstraints = false
submit.setTitle("SUBMIT", for: .normal)
view.addSubview(submit)
.custom
, .system
을 자주 사용합니다.)setTitle()
: 버튼의 제목을 작성합니다.intrinsic content size
각각의 뷰가 content를 얼마나 크게 보여줘야하는지 크기
예시)
cluesLabel.setContentHuggingPriority(UILayoutPriority(1), for: .vertical)
뷰안에 4행 5열로 이루어진 버튼을 삽입하기
let width = 150
let height = 80
for row in 0..<4 {
for column in 0..<5 {
let letterButton = UIButton(type: .system)
letterButton.titleLabel?.font = UIFont.systemFont(ofSize: 36)
letterButton.setTitle("WWW", for: .normal)
let frame = CGRect(x: column * width, y: row * height, width: width, height: height)
letterButton.frame = frame
buttonsView.addSubview(letterButton)
letterButtons.append(letterButton)
}
}
X및 Y좌표에 너비와 높이를 더한 직사각형 프레임을 만든 다음 이를 frame속성에 할당합니다
이러한 직사각형은 CGRect타입을 갖습니다.(Core Graphics에서 제공)