SwiftUI 다크 모드 지원 : 모드 변경시 색상 자동 변경
iOS는 다크 모드를 지원합니다. iOS에서 다크 모드 변경시 iOS에 의하여 앱의 네비게이션 바의 색상이나 기본 글자색 같은 경우는 자동으로 변경됩니다. 하지만 사용자가 직접 설정한 색은 다크 모드에 맞게 변경되지 않습니다. 이런 이유로 자동으로 변경되는 색상과 그렇지 않은 색상의 부조화로 인하여 화면의 가독성이 떨어지거나 화면 색상이 깨진거처럼 보기 좋지 않게 됩니다.
여기서는 다크 모드시 자동으로 색상이 변경하는 방법을 알아보도록 하겠습니다.
위 스크린샷처럼 우선 Asset를 프로젝트에서 선택하여 줍니다.
그 다음으로 서브 메뉴가 나오게 한 뒤에 "New Color Set"을 선택하여 줍니다.
스크린샷의 BackGroundColor와 같이 색상을 선택하면 Any Appearance와 Dark가 나옵니다.
Dark가 다크 모드에서의 색상이며 Any Appearance가 다크 모드 이외의 모드, 일반적인 경우의 색상입니다.
해당 모드를 선택하고 속성창에서 색상을 지정하면 됩니다.
여기서는 일반적인 경우에는 흰색을 다크 모드에서는 검은 색을 지정하였습니다.
그리고 SwiftUI에서 색상을 지정하는 곳에서 아래와 같이 입력하여 주시면 됩니다.
Color("BackGroudColor")
Color의 인자는 Color Set의 이름으로 여기서는 스크린샷에 있는 BackGroundColor를 이용하였습니다.
이렇게하면 다크 모드와 일반 모드가 변경시 해당 모드에 맞게 색상이 선택되어 변경됩니다.
처음에는 코드로 모드를 체크하여 변경하려고 하였습니다. 이렇게하면 앱을 실행하지 않을 때 모드를 변경하고 앱을 실행하여 잘 작동하였습니다. 하지만 앱 사용 중에 모드를 변경하면 색상이 자동으로 변경되지 않고 화면을 갱신해야 색상이 변경되는 문제가 발생하였습니다.
여기서 설명한 방법은 앱 사용 중에 모드가 변경되어도 화면 갱신 없이 색상으로 자동으로 변경됩니다.
실제로 이 방법은 아래 앱의 업데이트 시에 사용 되었습니다.