Auto Layout là hệ thống layout dựa trên constraints (ràng buộc) để phát triển giao diện người dùng cho thiết bị iOS. Đây là một adaptive UI - tự thích ứng với các kích thước màn hình và hướng xoay khác nhau.
Auto Layout hoàn toàn phụ thuộc vào constraints: developer định nghĩa mối quan hệ giữa các element lân cận hoặc parent để cố định vị trí.
Tại sao cần Auto Layout?
Khi thiết kế app iOS, UI phải tương thích với mọi kích thước màn hình và orientation. Auto Layout giải quyết bài toán này.
Ví dụ: Button đặt giữa màn hình iPhone 6, nhưng không còn giữa trên iPhone 8 Plus hay iPad do kích thước khác nhau.

Các bước thực hành cơ bản
Bước 1: Tạo dự án
Xcode → Single View App → Tên: "AutoLayout".
Bước 2: Thêm button, chọn device reference
Mở Main.storyboard → Thêm Button → Chọn device reference: iPhone 7 Plus (góc dưới cùng).

Bước 3: Hiểu Layout Buttons (góc dưới bên phải Interface Builder)
5 nút quan trọng:
- Align (cái cân): Căn chỉnh (center, leading, trailing...)
- Pin (cái thước): Khoảng cách (top, bottom, leading, trailing, width, height)
- Resolve Auto Layout Issues (cây ma thuật): Fix/clear constraints
- Resizing (hình vuông): Update frames
- Stack View: Nhóm view

Bước 4: Căn giữa màn hình (Center Horizontally & Vertically)
Chọn Button → Nhấn Align → Tick Horizontally in Container & Vertically in Container → Add 2 Constraints.

Button giờ đã ở giữa màn hình.

Cách thay thế: Control-Drag
Giữ Control + Kéo từ Button ra View cha (hoặc view khác) → Chọn Center Horizontally / Vertically in Container.

Bước 5: Đặt Width & Height
Chọn Button → Pin → Nhập Width, Height → Add 2 Constraints.

Nguyên tắc 4 ràng buộc bắt buộc: Leading, Trailing, Top/Bottom, Width/Height (hoặc Center X/Y + Width/Height).
Bước 6: Test trên nhiều thiết bị
Chạy trên các simulator khác nhau, cả Portrait và Landscape.


Bước 7: Sửa/Xóa Constraints
Utility Area (bên phải) → Tab 5 (Size Inspector) → Kéo xuống phần Constraints → Double-click để sửa hoặc Delete.

Auto Layout bằng Code (Programmatic)
// Tắt autoresizing mask
button.translatesAutoresizingMaskIntoConstraints = false
// Constraints
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
button.widthAnchor.constraint(equalToConstant: 200),
button.heightAnchor.constraint(equalToConstant: 50)
])
Best Practices
- Luôn dùng Safe Area Layout Guide (iOS 11+) thay vì top/bottom layout guide cũ
- Ưu tiên Stack View cho layout phức tạp (tự động quản lý constraints con)
- Dùng Intrinsic Content Size cho label, button, image view (không cần width/height constraint)
- Tránh conflict constraints (xem console: "Unable to simultaneously satisfy constraints")
- Test trên nhiều size class: Compact/Regular width/height
Kết luận
Auto Layout là kỹ năng cốt lõi cho iOS developer. Nắm vững constraints, priority, intrinsic content size, stack view sẽ giúp xây dựng UI thích ứng mọi thiết bị.