Jiwift

[iOS/Swift] cgColor 다크 모드, 라이트 모드가 적용되지 않을 때 cgColor Switching in iOS DarkMode 본문

iOS Dev/iOS

[iOS/Swift] cgColor 다크 모드, 라이트 모드가 적용되지 않을 때 cgColor Switching in iOS DarkMode

지위프트 2023. 9. 3. 01:29
반응형

 Xcode에서 UIColor 에셋 설정을 완료하고 다크모드와 라이트모드를 적용을 했으나를 사용하는 다크모드 혹은 라이트모드가 반영되지 않는 겨우가 있습니다. 분명 화면 모드를 변경했고 다른 애들은 다 바뀌었는데, 특정 누군가가 바뀌지 않는 경우를 저는 경험했습니다.

 첫 번째로 확인해야하는 곳은 UIColor 에셋입니다. 여기도 문제가 없이 제대로 해두었다면,  UIColor를 cgColor로 사용했는지 확인을 해야합니다. 

 

self.textFieldBoxView.layer.borderColor = UIColor(named: "surface200-Dark1")?.cgColor

 위와 같이 UIColor를 cgColor로 적용하고있는 경우 변경이 적용되지 않습니다.  이유로는 cgColor가 다이나믹 컬러를 지원하지 않는다고 하는데요.

 

 그래서 화면 모드가 변환되는 상황에 색을 다시 한번 적용해주면 현재 화면 모드 상태에 따라서 색상이 적용되어 다크모드가 대응을 할 수 있습니다. 아래는 변화를 감지하는 코드입니다. 

 

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
	if previousTraitCollection != nil {
		// cgColor 색상 다시 적용
		self.textFieldBoxView.layer.borderColor = UIColor(named: "surface200-Dark1")?.cgColor
	}
}

이때 에셋을 라이트 모드와 다크모드를 제대로 설정했다면 굳이 색상을 바꾸지 않고 하나의 에셋으로 계속 사용해도됩니다. 

반응형