앱을 만들다가 view에 cornerRadius를 주었는데 적용이 되지 않다고 버튼을 클릭했을 때 적용되는 문제를 발견
// 하위뷰의 코드
override func layoutSubviews() {
super.layoutSubviews()
buttons.forEach { button in
button.clipsToBounds = true
button.layer.cornerRadius = button.bounds.height / 2
}
}
디버깅을 해보니 버튼의 frame이 잡히지 않은 시점 즉 frame이 0인 시점에서
button.layer.cornerRadius = button.bounds.height / 2 을 해주어 cornerRadius가 0이되어 발생하는 문제인것을 확인.
왜 하위 뷰의 frame이 잡히지 않은것인가 디버깅을 해보니
- 뷰의 렌더링 순서는 무조건 상위뷰 → 하위뷰순이 아님
- updateContrains는 하위 → 상위, layoutSubViews는 상위 → 하위 순으로 호출
이란 것을 알게되었음.
상위 뷰의 frame으로 나누어주거나 고정값을 주는 방법으로 해결.