🍎 iOS & Swift

[iOS] UISwitch의 offTintColor 변경하기

taeeekki 2022. 7. 6. 23:01

🪴일반적인 방법

구글링을 하다보면 일반적으로 소개되는 방법은 다음과 같다.
layer를 둥글게 만들어주지 않으면 네모 모양으로 칠해지기 때문에 둥글게 깎아줘야 한다.
switch.backgroundColor = .blue
switch.layer.cornerRadius = switch.bounds.size.height / 2 (또는 16)

🪴하위 뷰에 접근하는 방법

왜 backgroundColor를 변경시키면 네모 모양으로 칠해질까에 대해서 생각해보다가 UISwitch의 구조를 살펴보고 싶어서 계층 구조를 뜯어봤다.

보니까 기본적으로 색이 들어가 있는 뷰랑 backgroundColor가 적용되는 뷰는 계층이 다른 것 같았다. 두 번째 이미지가 UISwitch의 backgroundColor만 변경시켰을 때의 모습이다. 그러니까 우리가 원하는 것처럼 layer 수정 없이 색을 변경시키고 싶다면, 첫 번째 이미지 처럼 둥근 뷰에 접근해서 색상을 변경시키면 된다.

// 하위 뷰에 직접 접근하는 방법
toggleButton.subviews.first?.subviews.first?.backgroundColor = .blue // 스위치가 off 상태일 때 배경색
toggleButton.onTintColor = .red  // 스위치가 on 상태일 때 배경색

print("타원 뷰 off 상태 배경색: ", toggleButton.subviews.first?.subviews[0].backgroundColor)

🪴계층 구조를 확인하고 싶다면

View Hierarchy Debugger를 이용해보세요.

🪴스크린 샷

off - blue
on - red