100 days of Swift - Day 36 (layoutMarginGuide vs SafeAreaLayoutGuide)

sun02·2021년 9월 26일
0

100 days of Swift 

목록 보기
29/40

코드로 view를 작성할 때엔 loadView() 메서드를 호출하여 유저 인터페이스를 생성하여 view를 초기화해 준 뒤 viewDidLoad()에서 추가 작업을 해야한다.

viewController의 lifeCycle

  • storyBoard나 xib등 view가 존재하지 않는 경우에 viewDidLoad() 전에 loadView() 호출된다.

override func loadView() {
	view = UIView()
    	view.backgroundColor = .white
}
  • 새로운 UIView() 인스턴스를 생성하고 그것을 viewController의 view에 할당한다.

NSLayoutConstraint.activate([
	scoreLabel.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
    	scoreLabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor)
])
    
  • 오토레이아웃 제약들이 매우 많을 때는 일일이 isActive = true 를 작성하기보다 제약조건 배열을 받는 NSLayoutConstraint.activate() 메서드를 사용하여 한 번에 모두 수행한다.

UIKit은 view를 고정할 수 있는 가이드를 여러 개 제공한다. safeAreaLayoutGuide와 layoutMarginsGuide가 가장 일반적으로 사용된다.

safeAreaLayoutGuide

: 둥근 모서리와 노치를 제외한 사용 가능한 공간

layoutMarginsGuide

: view가 왼쪽 및 오른쪽 가장자리에서 실행되지 않도록 여백을 추가한 공간

safeAreaLayoutGuide vs layoutMarginsGuide

  • 두 개를 겹쳐보면 요정도 차이가 있다.
    • top과 bottom은 같고 leading과 trailing에 여백 차이가 있다.

cluesLabel.setContentHuggingPriority(UILayoutPriority(1), for: .vertical)
answersLabel.setContentHuggingPriority(UILayoutPriority(1), for: .vertical)
  • Content hugging priority : 해당 view가 intrinsic content size보다 커질 가능성을 결정한다. 우선 순위가 높을 수록 늘리지 않는 것을 선호한다는 의미이고, 낮을 수록 늘어나기 쉽다.

그렇다면 지정해 주기 전에 default로 설정되어 있는 우선순위는 어떻게 될까?

위와 같이 UIView의 contenthuggingPriority를 찍어보니 vertical, horizontal 모두 250, 250 이 나온다.

객체마다 default로 지정되어 있는 우선순위 값이 다르다.

default 우선순위 사진 출처: stackoverflow

0개의 댓글