🍎 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
