

NSLayoutAnchor를 이용한 오토레이아웃

V
NSLayoutAnchor란?
오토레이아웃에서 뷰의 위치와 크기를 앵커(기준점) 기반으로 제약 조건을 거는 방식입니다. 코드로 레이아웃을 잡을 때 가장 많이 쓰입니다.
예시: 버튼을 화면 정중앙에 배치
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .system)
button.setTitle("로그인 버튼", for: .normal)
view.addSubview(button)
// ⚠️ 이 한 줄 필수! 없으면 제약이 무시됨
button.translatesAutoresizingMaskIntoConstraints = false
// 가로 중앙 정렬
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
// 세로 중앙 정렬
button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
// 너비 고정
button.widthAnchor.constraint(equalToConstant: 150).isActive = true
// 높이 고정
button.heightAnchor.constraint(equalToConstant: 66).isActive = true
}
}
주요 앵커 종류
| centerXAnchor | 가로 중앙 |
| centerYAnchor | 세로 중앙 |
| widthAnchor | 너비 |
| heightAnchor | 높이 |
| topAnchor | 위쪽 가장자리 |
| leadingAnchor | 왼쪽 가장자리 |
translatesAutoresizingMaskIntoConstraints = false는 코드로 오토레이아웃을 쓸 때 반드시 설정해야 합니다. 빠트리면 제약 조건이 충돌해서 레이아웃이 깨집니다.





UIKit vs SwiftUI 비교
| translatesAutoresizingMaskIntoConstraints = false | 없음 (자동) |
| centerXAnchor.constraint(equalTo:...) | VStack, HStack 으로 배치 |
| widthAnchor.constraint(equalToConstant: 150) | .frame(width: 150) |
| topAnchor.constraint(equalTo:..., constant: 16) | .padding(.top, 16) |
SwiftUI는 제약 조건을 직접 걸지 않고, 컨테이너(VStack, HStack, ZStack) 안에 뷰를 선언하는 것만으로 레이아웃이 자동으로 잡힙니다. 코드가 훨씬 짧고 직관적인 게 가장 큰 차이점입니다.















if let aCnt = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiCnt { let numF = NumberFormatter() numF.numberStyle = .decimal let aCount = Int(aCnt)! let result = numF.string(for: aCount)! + "명" cell.audiCount.text = "어제 : \(result)" } 이 부분을 설명해줘
코드 설명
전체 목적
관객수 숫자("82482")를 천 단위 콤마 형식("82,482명")으로 변환해서 셀에 표시
한 줄씩 분석
if let aCnt = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiCnt {
- movieData가 nil이 아닐 때만 안으로 진입 (옵셔널 바인딩)
- 해당 row의 audiCnt 값을 aCnt에 꺼냄
- aCnt는 현재 문자열 타입 (예: "82482")
let numF = NumberFormatter()
numF.numberStyle = .decimal
- NumberFormatter : 숫자를 원하는 형식의 문자열로 바꿔주는 도구
- .decimal : 천 단위마다 콤마를 찍는 형식
- 예) 82482 → "82,482"
let aCount = Int(aCnt)!
- 문자열 "82482" → 정수 82482 로 변환
- Int()는 실패할 수 있어서 옵셔널 반환 → !로 강제 언래핑
- ⚠️ API 데이터가 항상 숫자라는 확신이 있을 때만 ! 사용
let result = numF.string(for: aCount)! + "명"
- numF.string(for:) : 숫자를 콤마 형식 문자열로 변환
- 82482 → "82,482"
- 뒤에 "명" 문자열을 붙임
- "82,482" → "82,482명"
cell.audiCount.text = "어제 : \(result)"
- 문자열 보간으로 최종 결과를 셀 레이블에 표시
- 최종 결과: "어제 : 82,482명"
전체 변환 흐름
"82482" (String, API 원본)
↓ Int(aCnt)
82482 (Int)
↓ numF.string(for:)
"82,482" (String, 콤마 포맷)
↓ + "명"
"82,482명"
↓ "어제 : \(result)"
"어제 : 82,482명" ← 셀에 표시