---
# System prepended metadata

title: '[TIL] 230630 autoresizing, navigation 등'
tags: [careerstarter TIL]

---

## TIL (Today I Learned) 
6월 30일 (금)

### translatesAutoResizingMaskIntoConstraints
- UIView의 인스턴스 프로퍼티
![](https://hackmd.io/_uploads/ryXo-uRd3.png)
  뷰의 autoresizing mask가 Auto Layout constraints로 변환되는지 여부를 결정하는 부울 값
  > **autoresizing mask**
  > UIView의 인스턴스 프로퍼티
  > 정의: Superview의 bounds가 변경될 때, receiver의 size를 조정하는 방법을 결정하는 정수 비트 마스크
- Discussion
  값이 true이면 autoresizing mask로 **지정된 행동(behavior)을 복제하는 Constraint 집합을 만듦**
  또한 View의 frame, bounds 또는 center 프로퍼티를 사용하여 View의 크기와 위치를 수정하여 auto layout에서 정적인 프레임 기반 레이아웃을 만들 수 있음. autoresizing mask constraint는 View의 크기와 위치를 완전히 지정함.
  따라서 충돌을 일으키지 않고, 이 크기 또는 위치를 수정하기 위해 **추가 constraint를 추가할 수 없음**. auto layout을 사용하여 View의 크기와 위치를 동적으로 계산하려면, 이 프로퍼티를 false로 설정한 다음, View에 모호(ambiguous)하지 않고 충돌하지 않는(nonconflicting) constraint 집합을 제공해야 함.
  기본적으로 프로그래밍 방식으로 만드는 모든 View에 대해 이 프로퍼티는 true로 설정됨
  Interface Builder(=스토리보드)에서 View를 추가하면, 시스템은 이 프로퍼티를 false로 자동 설정함

참고: [iOS ) translatesAutoresizingMaskIntoConstraints](https://zeddios.tistory.com/474)

### BackButton 설정
navigationController를 활용하여 화면 1에서 화면 2를 push한다고 가정.
화면 2의 backBarButtonItem에 원하는 title이 보이도록 설정하고 싶을 때
1. **화면 1**의 View Controller 파일을 연다.
2. UIBarButtonItem 타입의 프로퍼티를 만들어준다.
    ``` swift
    let backBarButtonItem = UIBarButtonItem(title: "한국의 출품작", style: .plain, target: self, action: nil)
    ```
3. 해당 프로퍼티를 navigationItem의 backBarButtonItem으로 설정해준다.
    ``` swift
    navigationItem.backBarButtonItem = backBarButtonItem
    ```

### NavigationBarHidden
NavigationBar를 숨기고 싶을 때
``` swift
navigationController?.setNavigationBarHidden(true, animated: false)
```

## 트러블슈팅
### CustomCell에 Label을 2개 넣어주었을 때 priority ambiguity 발생
![](https://hackmd.io/_uploads/SJGcPtC_2.png =200x)
- 문제상황
imageView 1개와 Label 1개를 가지고 있는 CustomCell의 stackView에 Label을 하나 더 추가해보았다.
이 때 priority ambiguity 경고가 떴다.
- 오류발생원인
StackView의 Alignment는 Fill로 설정되어있기때문에 StackView 내 컴포넌트들로 가로를 채워야한다. 하지만 두 Label의 hugging priority가 같기때문에 어떤 Label이 얼마만큼의 공간을 차지할 것인지 알 수없어 오류가 발생한 것이었다.
- 해결방법
오른쪽에 위치한 Label에 hugging priority를 낮춤으로써 오류를 해결하였다.
- 추가실험
  - 실험 1
    왼쪽 Label: hugging 251, resistance 750
    오른쪽 Label: hugging 250, resistance 750
![](https://hackmd.io/_uploads/BJyKiq0u2.png =200x)
-> 두 Label의 resistance는 동일하나, 왼쪽 Label의 hugging priority가 오른쪽 Label보다 더 높기때문에 오른쪽 Label의 글씨가 짤린다.
  - 실험 2
    왼쪽 Label: hugging 251, resistance 750
    오른쪽 Label: hugging 250, resistance 751
![](https://hackmd.io/_uploads/BJJjJjAu2.png =200x)
-> 오른쪽 Label의 resistance priority가 더 높기때문에 왼쪽 Label의 글씨가 짤린다.

    > **CHCR (Content hugging, Content Resistance)**
    > - Content Hugging: 늘어나지 않게 버티는 힘
    = priority가 높을 수록 본인의 사이즈를 지킴
    > - Content Compression Resistance: 외부에서 압력이 들어왔을 때 버티는 힘
    = priority가 높을 수록 본인의 컨텐츠를 지킴