[Swift] AutoLayout & HIG & Dark Theme

simoniful·2021년 10월 16일
0

Swift

목록 보기
5/9
post-thumbnail

SizeClass

iOS는 다양한 종류의 기기가 있고, 사용자는 세로 화면, 가로 화면, iPad의 스플릿 뷰, 멀티 태스킹 등 다양한 방식으로 앱을 사용합니다. 다양한 형태와 크기에 맞게 레이아웃을 구성하기 위해서, Size Class를 통해 구현합니다. Size Class는 크기에 따라 콘텐츠 영역에 자동으로 할당되는 특성을 가지고 있습니다.

Regualr / Compact

iOS는 콘텐츠 영역의 SizeClass에 따라서 동적으로 레이아웃을 조정합니다. 예를 들어 기기가 가로에서 세로로 회전하는 경우 세로에 대한 Size Class가 Compact Height가 Regular Height으로 변경되면 TabBar의 높이가 더 커질 수 있습니다.

SizeClass의 활용

오토레이아웃을 통해 가로모드에 대한 UI를 별도로 구성할 수 있습니다.



뷰 컨트롤러를 계층구조로 탐색할 수 있게 해주는 컨트롤러로, 수직적 형태의 계층구조(Stack)를 띄고 있습니다. 이를 드릴다운 인터페이스라고 합니다.
RootViewController가 존재해야 네비게이션 컨트롤러를 사용할 수 있습니다.
RootViewController에 연결된 다른 뷰 컨트롤러는 ChildViewController이며, 화면 전환시 Push-Pop 구조로 되어 있습니다.

  • UINavigationBar
    • 뷰에서 상단에 위치한 화면 계층 이동에 대한 조작부를 나타내는 곳
    • iOS 13부터 UINavigationBarAppearance라는 스타일 자식요소를 시스템적으로 제공합니다.
    • standard, compact, scrollEdge, compact scrollEdge의 각 사이즈 클래스에 해당하는 UI를 별도로 구성할 수 있습니다.
      (기본적으로 standard 기준으로 해당 스타일 적용)
    • 디바이스 크기(Size Class)에 따라 해당 설정이 다르기에 가이드라인을 참고하여 프로젝트를 진행해야 합니다.
  • UIToolbar
    • UITabBar와 형태는 유사하나 현재 뷰와 관련된 작업을 보여줍니다

TabBarController

TabBarController는 네비게이션 컨트롤러와 유사한 특수 목적의 뷰 컨트롤러로 네비게이션이 뷰의 관계가 수직적(Stack)의 형태라면 TabBarController 는 수평적인 관계를 가지고 있습니다.

UITabBarController 는 여러 섹션을 가지는 앱에서 각 섹션을 선택해 해당 뷰로 이동할 수 있도록 합니다. 유저가 특정한 탭을 누르면, Tab bar controller 는 이전 view 를 교체해 탭과 연결된 view controller 의 root view 를 보여줍니다.

🔗 Tab Bar - UITabBar, UITabBarController


App Lifecycle

→ 이전 포스팅 참고: App Lifecycle

AppDelegate 내에서 실행되며 아래와 같은 메서드를 오버라이딩이 가능합니다.

  • application(_:didFinishLaunching:) - 앱이 처음 시작될 때 실행
  • applicationWillResignActive: - 앱이 active 에서 inactive로 이동될 때 실행
  • applicationDidEnterBackground: - 앱이 background 상태일 때 실행
  • applicationWillEnterForeground: - 앱이 background에서 foreground로 이동 될때 실행 (아직 foreground에서 실행중이진 않음)
  • applicationDidBecomeActive: - 앱이 active상태가 되어 실행 중일 때
  • applicationWillTerminate: - 앱이 종료될 때 실행

ViewController Lifecycle

  • loadView - 컨트롤러가 관리하는 뷰를 만든다. 뷰 컨트롤러가 생성되고 순차적으로 완성되었을때만 호출된다.
  • viewDidLoad - 컨트롤러의 뷰가 메모리에 올라간 뒤에 호출된다. 뷰가 생성될때 한 번만 호출된다 (초기화, 데이터 패치)
  • viewWillAppear - 화면에 뷰가 표시될 때마다 호출된다. 이 단계는 뷰는 정의된 바운드를 가지고 있지만 화면회전은 적용되지않는다. 다른 뷰로 이동했다가 돌아올 때 재 호출된다.
    다른 뷰로 이동했다가 돌아올 때 재 호출
  • viewWillLayoutSubviews - 뷰 컨트롤러에게 그 자식뷰의 레이아웃을 조정하는 것에 대한 것을 알려주기위해 호출된다. 이 메서드는 frame이 바뀔때마다 호출된다.
  • viewDidLayoutSubviews - 뷰가 그 자식 뷰의 레이아웃에 영향을 준 것을 뷰컨트롤러에게 알려주기 위해 호출된다. 뷰가 그 자식 View의 레이아웃을 바꾸고난 뒤에 추가적인 변경을 하고 싶을때 사용하는 이벤트 함수
  • viewDidAppear - 뷰가 나타났다는 것을 컨트롤러에게 알리는 역할을 한다. 호출되는 시점으로는 뷰가 화면에 나타난 직후에 실행된다 (애니메이션)
  • viewWillDisAppear - 뷰가 사라지기 직전에 호출되는 함수이다. 뷰가 삭제 되려고하고있는 것을 ViewController에게 알린다.
  • viewDidDisappear - ViewController에게 View가 제거되었음을 알린다. 호출시점은 viewWillDisAppear 다음에 호출된다.
profile
소신있게 정진합니다.

0개의 댓글