TIL

[Sesac IOS] 28일차 TIL

28일차 수업 내용을 정리한 글입니다.


Learned

iOS의 레이아웃

1) Frame Based Layout

  • 수퍼뷰 안에서 뷰의 위치와 크기를 정보를 가지고 뷰를 레이아웃
  • 서브뷰는 수퍼뷰 내부의 좌표(point)와 일정 크기의 너비와 높이(size)를 가짐.
  • 수퍼뷰와 서브뷰 관계에서만 적용됨.

2) Auto Layout

  • 다른 뷰 사이의 제약(Constraint)을 설정해서 뷰를 레이아웃
  • 수퍼뷰와 서브뷰 뿐만 아니라 형제 뷰 관계에서도 적용 가능

3) Adaptive Layout

  • Size Class, Trait Collection 등을 통해 모든iOS와 iPadOS 디바이스 크기에
    적절히 대응할 수 있는 레이아웃
  • Size Class
    • 디바이스의 규격을 regular, compact라는 두 클래스로 나누고
      모든 디바이스의 너비, 높이에 클래스를 지정해 놓음.
    • 너비, 높이 클래스 조합에 따라 스토리보드에서 다른 폰트, 배경색 등
      커스텀 설정이 가능함.

Autoresizing Mask vs Auto Layout

1) 등장 배경

  • 디바이스 해상도가 다양해짐에 따라 기존의 Frame Based Layout을 사용해
    일관된 UI를 구성하기 어려워짐.
  • 따라서 수퍼뷰의 크기가 달라질 때 서브뷰의 레이아웃을 자동으로 변경해주는 기능들이
    등장하는데 그게 오토 리사이징 마스크와 오토 레이아웃임.

2) Autoresizing Mask

  • 수퍼뷰의 크기와 위치가 변경될 때 서브뷰의 레이아웃을 자동으로 결정해주는 기능으로
    오토 레이아웃이 등장하기 전에 도입된 방식임
  • 기존 Frame Based Layout에서는 수퍼뷰가 변경되면 서브뷰의
    크기와 위치를 다시 잡아줘야 하는 번거로움이 있음.
  • 오토 리사이징 마스크를 설정하면 수퍼뷰와 서브뷰 사이의 고정 여백과
    늘어날 여백을 설정할 수 있어서 크기 변화에 동적으로 대응할 수 있음.
  • 오토 레이아웃보다 세부적인 조정은 어렵다.

3) translateAutoresizingMaskIntoConstraints 프로퍼티

  • 오토 리사이징 마스크 설정을 제약(Constraint)로 바꿀지 여부를 결정
  • 기본적으로 UI 객체는 이 프로퍼티가 true로 설정돼있지만
    스토리보드로 구성한 UI 객체에 오토 레이아웃을 적용하면 값이 false로 변경됨.
  • 이 값이 true인 상태로 오토 레이아웃을 적용하면 제약으로 변환된
    오토 리사이징 마스크가 추가한 제약(오토 레이아웃)과 충돌을 일으킬 수 있음.
  • 즉, 오토 레이아웃을 사용할 때는 이 프로퍼티를 false로 변경해야 함.

기타

  • 시스템에서 호출하는 콜백 함수(delegate, dataSource 등)의 내부 매개변수 이름은 변경이 가능함.
  • Cell의 인스턴스가 새로 생성될 때(재사용 X) awakeFromNib 메서드가 호출됨.
  • prepareForReuse 메서드를 사용해서 셀이 재사용될 때마다 셀 콘텐츠를 초기화할 수 있음.
  • 테이블뷰 셀 내부에 컬렉션뷰를 사용하는 등 복합적인 구조에서는
    시스템의 재사용 메커니즘에서 indexPath에 오류가 생길 수 있음.
    특히 매우 빠르게 스크롤 할 때 index out of range 에러가 발생할 수 있음.
    해결 방법 : 컬렉션뷰를 담고있는 테이블뷰 셀이 그려질때마다 컬렉션뷰 reloadData 호출
  • dump : print와 비슷하지만 객체의 계층 구조에 대한 정보를 디버그창에 출력해줌.
  • 반복문을 통해 네트워크 요청 시 응답 순서가 보장되지 않고 트래픽 초과로 요청이 차단당할 수 있음.
  • Kingfisher 라이브러리로 불러온 이미지에는 캐싱이 기본적으로 적용됨.
  • dateformat에서 "YYYY"는 week-based-year로서, 특정 Date를 기준으로
    Date가 속한 주가 다음 연도로 넘어가는 주라면 다음 연도를 출력함.
    ex) 2020년 12월 30일 -> "YYYY-MM-dd" -> 2021년 12월 30일

이상입니다. 

 

'TIL' 카테고리의 다른 글

[Sesac IOS] 30일차 TIL  (0) 2022.08.16
[Sesac IOS] 29일차 TIL  (0) 2022.08.12
[Sesac IOS] 26~27일차 TIL  (0) 2022.08.09
[Sesac IOS] 25일차 TIL  (0) 2022.08.07
[Sesac IOS] 24일차 TIL  (0) 2022.08.05