UIStackView 활용법: 유연한 레이아웃 구성
작성일 :
UIStackView 활용법: 유연한 레이아웃 구성
UIStackView란?
UIStackView
는 iOS 개발에서 유연하고 관리하기 쉬운 레이아웃을 구성할 수 있게 도와주는 컨테이너 뷰입니다. UIStackView
를 사용하면 뷰들을 수평 또는 수직으로 쉽게 배열할 수 있습니다. 대부분의 UIKit 요소와 호환되며, 제약 조건을 일일이 설정하지 않고도 자동으로 레이아웃을 관리해 줍니다.
UIStackView의 기본 구조
UIStackView
는 내부에 포함된 배열된 뷰들의 배치를 관리합니다. 주요 프로퍼티로는 axis
, alignment
, distribution
, spacing
등이 있으며, 이들로 스택 뷰의 설정을 조정할 수 있습니다.
axis
: 스택 뷰의 방향을 결정합니다 (.horizontal
또는.vertical
).alignment
: 배열된 뷰들의 정렬 방식을 지정합니다 (.fill
,.leading
,.top
, etc.).distribution
: 배열된 뷰들 사이의 공간을 어떻게 분배할지 결정합니다 (.fill
,.fillEqually
,.fillProportionally
, etc.).spacing
: 배열된 뷰들 사이의 간격을 설정합니다.
코드로 UIStackView 생성하기
코드로 UIStackView
를 생성하고 설정하는 방법을 예제로 살펴보겠습니다.
swiftimport UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // UIView 생성 let view1 = UIView() view1.backgroundColor = .red let view2 = UIView() view2.backgroundColor = .green let view3 = UIView() view3.backgroundColor = .blue // UIStackView 생성 및 설정 let stackView = UIStackView(arrangedSubviews: [view1, view2, view3]) stackView.axis = .vertical stackView.alignment = .fill stackView.distribution = .fillEqually stackView.spacing = 10 // 스택 뷰를 메인 뷰에 추가 stackView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(stackView) // 제약 조건 설정 NSLayoutConstraint.activate([ stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50), stackView.bottomAnchor.constraint(lessThanOrEqualTo: view.bottomAnchor, constant: -50) ]) } }
이 예제에서는 3개의 UIView
를 생성하고 이를 UIStackView
에 추가하여 수직으로 배열하고 있습니다. 각각의 뷰는 동일한 크기로 나뉘며, 뷰들 사이에는 10포인트의 간격이 있습니다.
스토리보드를 사용한 UIStackView 설정
스토리보드에서도 UIStackView
를 쉽게 사용할 수 있습니다. 여기에 대한 단계별 가이드를 소개합니다.
- 스토리보드에서 뷰 컨트롤러를 선택하고, 객체 라이브러리에서
UIStackView
를 드래그하여 뷰 컨트롤러에 추가합니다. UIStackView
의 속성을 설정합니다. 예를 들어,axis
를horizontal
또는vertical
로 설정합니다.UIStackView
안에 추가할 뷰들을 드래그하여 추가합니다.- 각 요소의 배치, 정렬, 분배, 간격 등의 속성을 설정합니다.
- 제약 조건을 설정하여 화면의 원하는 위치에 스택 뷰를 배치합니다.
실용적인 예제들
동적인 뷰 추가 및 삭제
UIStackView
는 동적으로 뷰를 추가하거나 삭제할 때 매우 유용합니다. 다음은 예제입니다:
swiftclass DynamicStackViewController: UIViewController { let stackView = UIStackView() override func viewDidLoad() { super.viewDidLoad() stackView.axis = .vertical stackView.alignment = .fill stackView.distribution = .fillEqually stackView.spacing = 10 stackView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(stackView) NSLayoutConstraint.activate([ stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20), stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20), stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50) ]) // 버튼 생성 및 추가 let addButton = UIButton(type: .system) addButton.setTitle("Add View", for: .normal) addButton.addTarget(self, action: #selector(addView), for: .touchUpInside) view.addSubview(addButton) addButton.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ addButton.topAnchor.constraint(equalTo: stackView.bottomAnchor, constant: 20), addButton.centerXAnchor.constraint(equalTo: view.centerXAnchor) ]) } @objc func addView() { let newView = UIView() newView.backgroundColor = .random() stackView.addArrangedSubview(newView) } } // UIColor에 랜덤 색상 메서드 추가 eextension UIColor { static func random() -> UIColor { return UIColor( red: CGFloat(arc4random() % 256) / 255.0, green: CGFloat(arc4random() % 256) / 255.0, blue: CGFloat(arc4random() % 256) / 255.0, alpha: 1.0 ) } }
이 코드는