iOS 응용 (swift)
[iOS - swift] UIStackView에서 backgroundColor 적용 방법, drawRect(), draw(_:) (iOS 13이하 버전에 해당)
jake-kim
2022. 5. 3. 22:51
UIStackView의 backgroundColor 속성
- UIStackView를 사용할때 주의할 점
- backgroundColor 프로퍼티에 색상을 입력해도 iOS13 이하 버전에서는 draw(_:)를 호출해주지 않아서, clear색상으로 적용
myStackView.backgroundColor = .orange // iOS 13이하에서는 적용 x
draw(_:) 메소드란?


- draw(_:) 메소드의 파라미터인 rect는 뷰의 경계이며, 내부적으로 불릴때는 보이는 뷰의 전체 직사각형의 경계
- 내부적으로 draw(_:) 불리는 타이밍
- 뷰가 메모리에 올라온 후 (viewDidLoad) 뷰를 그려줄 때 호출
- 드로잉 사이클이 있으므로, 코드에서 draw(_:)를 직접적으로 호출하지 말고, 다음 loop 사이클에 그려달라고 요청하는 setNeedsDisplay()를 사용할 것
UIStackView에서 backgroundColor 적용 방법
- iOS 13 버전 이하인 경우에만 stackView 바로 위에 UIView를 올려서, 그 UIView에 backgroundColor를 적용
private let stackView: UIStackView = {
let stackView = UIStackView()
stackView.axis = .vertical
stackView.translatesAutoresizingMaskIntoConstraints = false
if #available(iOS 14.0, *) {
stackView.backgroundColor = .orange
} else {
let backgroundView = UIView()
backgroundView.backgroundColor = .orange
backgroundView.translatesAutoresizingMaskIntoConstraints = false
stackView.addSubview(backgroundView)
NSLayoutConstraint.activate([
backgroundView.leftAnchor.constraint(equalTo: stackView.leftAnchor),
backgroundView.rightAnchor.constraint(equalTo: stackView.rightAnchor),
backgroundView.bottomAnchor.constraint(equalTo: stackView.bottomAnchor),
backgroundView.topAnchor.constraint(equalTo: stackView.topAnchor),
])
}
return stackView
}()
* 참고
https://developer.apple.com/documentation/uikit/uiview/1622529-drawrect
https://www.hackingwithswift.com/example-code/uikit/how-to-give-a-uistackview-a-background-color