티스토리 뷰
# iOS 17 미만
iOS 17 미만에서는
backgroundColor를 먹여도 text Selection이 그 위에 되었음
(iOS 16.4 로 테스트한 결과)
뷰계층구조를 보면 UITextSelectionRectView 가 텍스트를 나타내는 뷰보다 위에 있음을 명확히 알 수 있음.
# iOS 17
하지만 iOS 17에서는 계층 구조가 바뀜!
(베타이지만 가장 최신버전 iOS 17.2 로 테스트한 결과. 정식 하위버전도 동일함.)
17에서는 RectView가 아니라 RangeView로 바뀌고 글자를 보여주는 뷰 (_UITextLayoutFragmentView) 보다 더 하위에 위치하게 됨
RangeView 상위의 HighlightView 는 iOS 17 에 새로 나온건데 문서에도 behind 라고 적혀있었음 ;;;
# 최소 대응
그래서 background 를 구냥 디폴트값 흰색으로 지정하고 있었다면
clear 로 바꾸거나 삭제해야지 하위 OS 와 동일하게 동작을 하게 됨
# 백그라운드 필요한 앱 대응
하지만 다양한 백그라운드 컬러를 제공해주는 앱은 어떻게 해야하는 가 ??
기존처럼 백그라운드위에 selection 도 보여주고 싶다면 ??
여기 나와있는 것처럼 iOS 17만 분기해서 UITextSelectionDisplayInteraction 을 구현해주는 방법도 있을 것 같고
이미 구현되어있는 highlight 뷰를 찾아 바꾸는 방법도 있을 것 같다.
근데 이렇게 하면 동작안함 (잘 기억이 안나는데 부모 뷰 내에서만 해당하는 순서일 듯. 원하는 대로 동작하려면 부모 뷰도 zposition 을 같이 높여야할 것 같음)
if #available(iOS 17.0, *) {
self.textView.interactions.forEach {
if let interaction = $0 as? UITextSelectionDisplayInteraction {
interaction.highlightView.layer.zPosition = 100
}
}
}
하지만 부모뷰가 UIView 라서 이걸 찾기는 좀 그러니
텍스트를 담고 있는 _UITextContainerView 를 찾아서 zIndex 를 낮춰주자
self.textView.subviews.forEach { view in
if String(describing: type(of: view)) == "_UITextContainerView" {
view.layer.zPosition = -100
}
}
// -100은 제가 임의로 넣은 값! -1로 해도 무방함.
백그라운드 위에 selection도 잘 나오는 것을 볼 수 있다!
따흑 이렇게 정녕 해야하는가.. ?? 하지만 다른 방법이 없는 듯하다 (🥹)
'🍏 > iOS' 카테고리의 다른 글
[Xcode] Instruments - Swift Concurrency (1) | 2024.03.11 |
---|---|
[Xcode] Instruments 로 Hang 개선하기 (8) | 2024.03.08 |
[iOS] external view hierarchy debugger (1) | 2023.10.26 |
[StoreKitTest] StoreKit Configuration File > Price Locale 바꾸는 법 (0) | 2023.08.08 |
[iOS] Swift Package 에서 커스텀 폰트 사용하기 (0) | 2023.03.13 |
- Total
- Today
- Yesterday
- METAL
- SerializerMethodField
- Python Type Hint
- 플러터 얼럿
- 장고 URL querystring
- ipad multitasking
- Django FCM
- github actions
- Watch App for iOS App vs Watch App
- flutter deep link
- ribs
- Flutter 로딩
- flutter dynamic link
- Dart Factory
- flutter 앱 출시
- flutter build mode
- Django Firebase Cloud Messaging
- DRF APIException
- 구글 Geocoding API
- Sketch 누끼
- Flutter Clipboard
- cocoapod
- Flutter getter setter
- PencilKit
- Flutter Spacer
- drf custom error
- Flutter Text Gradient
- 장고 Custom Management Command
- Django Heroku Scheduler
- 플러터 싱글톤
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |