Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Archive
- window
- appstore
- MacOS
- IOS
- 웹뷰
- Xcode
- Apple
- Git
- Python
- Firebase
- Swift
- JPA
- Notification
- Session
- rxswift
- error
- UIButton
- FLUTTER
- 개발자
- darkmode
- Realm
- github
- view
- iOS16
- SwiftUI
- mac
- stack
- 한글
- Code
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
Swift ) StackView backgroundColor - EEYatHo iOS 본문
반응형
요약
iOS14 미만은 UIStackView의 layer이 CATransformLayer이라 backgroundColor 속성을 무시한다.
iOS14 이상부터는 UIStackView의 layer이 CALayer로 바뀌면서 backgroundColor 속성을 사용할 수 있다.
따라서 버전분기 코드로 대응하면 된다.
iOS 12에서 stackView의 backgroundColor가 이상한 이슈가 발견되었다.
아래 코드를 실행해도, backgroundColor를 찍어보면, nil이 나온다/?
stackView.backgroundColor = .blue
(lldb) po stackView.backgroundColor
"nil"
iOS12에서는 UIStackView의 layer은 CATransformLayer 이다.
(lldb) po stackView
<UIStackView: 0x7fdc0270b3c0; frame = (0 0; 0 0);
layer = <CATransformLayer: 0x600002de3e40>>
하지만 iOS14부터는 layer가 CALayer 클래스로 변경되었다.
(lldb) po stackView
<UIStackView: 0x7fa253f0bdc0; frame = (0 0; 0 0);
layer = <CALayer: 0x600003339440>>
출처 : https://useyourloaf.com/blog/stack-view-background-color-in-ios-14/
아래에 적힌 것 처럼, CATransformLayer는 CALayer과 다르게, backgroundColor를 포함한 여러 속성을 무시한다.
- Only the sublayers of a transform layer are rendered. The CALayer properties that are rendered by a layer are ignored, including: backgroundColor, contents, border style properties, stroke style properties, etc.
출처 : https://developer.apple.com/documentation/quartzcore/catransformlayer
즉, iOS14부터는 UIStackView의 layer이 CALayer로 바뀌었으므로, backgroundColor가 적용된다.
아래의 버전 분기 코드로 대응할 수 있다.
if #available(iOS 14.0, *) {
stackView.backgroundColor = .black
} else {
let backgroundView = UIView()
backgroundView.backgroundColor = .black
stackView.addSubview(backgroundView)
backgroundView.snp.makeConstraints {
$0.edges.equalToSuperview()
}
stackView.sendSubviewToBack(backgroundView)
}
'iOS, Swift' 카테고리의 다른 글
Swift ) IDFA (ADID) (광고식별자) - EEYatHo iOS (0) | 2021.11.19 |
---|---|
Swift ) Realm List Migration - EEYatHo iOS (0) | 2021.11.14 |
Swift ) view가 button클릭을 막을 때 - EEYatHo iOS (0) | 2021.10.27 |
Swift ) Url nil 나올 때 (한글, 공백 등) - EEYatHo iOS (0) | 2021.10.26 |
Swift ) nib must contain exactly one top level object which must be a UITableViewCell instance - EEYatHo iOS (0) | 2021.10.25 |
Comments