관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] UIStackView에서 backgroundColor 적용 방법, drawRect(), draw(_:) (iOS 13이하 버전에 해당) 본문

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

Comments