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 |
Tags
- 인프런오리지널
- 교환학생토플
- 스위프트
- nodeJS
- 웹크롤링
- SwiftUI
- 카카오톡채팅봇
- 인프런강의
- 유학토플
- 우리를위한프로그래밍
- uikit
- 토플공부수기
- rxswift
- 프로그래머스
- 파이썬중급강의
- swift
- Python3
- 노드JS
- IOS프로그래밍
- 리프2기
- 파이썬웹크롤링
- 자바스크립트
- 파이썬중급
- 인프런파이썬강의
- 토플
- 인프런파이썬
- JS
- 인프런
- 파이썬
- IOS
Archives
- Today
- Total
먹고 기도하고 코딩하라
iOS 17에서의 위젯 대응 본문
728x90
728x90
iOS 17에서 기존과 같이 위젯을 만들었을 때, 크게 2가지 문제점이 있다.
- 위젯 위아래의 마진으로 레이아웃 깨짐
- 디버그 모드에서 설치 안됨
1. 위젯 위아래의 마진으로 레이아웃 깨짐
대응을 하지 않은 경우, iOS 17에서의 위젯은 위아래로 마진이 생긴다. 그래서 기존에 설정해둔 레이아웃이 깨지게 된다.
다행히 iOS 17 이상에서 이 마진을 무시할 수 있다. Widget의 body, WidgetConfiguration에서 다음과 같이 .contentMarginDisabled()를 적용해주면 마진을 무시하게 된다.
var body: some WidgetConfiguration {
let configuration = StaticConfiguration(kind: kind, provider: Provider()) { entry in
RecentWidgetView(entry: entry)
}
.configurationDisplayName("Display Name")
.description("Description")
if #available(iOS 15.0, *) {
return configuration.contentMarginsDisabled()
}
return configuration
}
2. 디버그 모드에서 설치 안됨
디버그 모드 앱에서 위젯을 설치하려고 하면 다음과 같은 메시지가 나타나면서 위젯이 제대로 보이지 않는 이슈가 있다.
Please adopt containerBackground API
iOS 17 업데이트와 더불어 이제는 아이패드와 macOS Sonoma에도 위젯을 설치할 수 있게 됐다. 이처럼 여러 플랫폼을 지원하게 되면서 위젯의 어떤 부분이 백그라운드고 어떤 부분이 포어그라운드인지 잘 식별하고 표현하기 위해 Container background를 도입했다는 것이 애플 쪽 설명이다.
해결법은 간단하다. iOS 17 이상에서 containerBackground를 사용하는 extension 메소드를 추가해준다. .widgetBackground 안에는 배경으로 어떤 뷰가 들어갈지를 설정해주면 된다.
extension View {
func widgetBackground(_ backgroundView: some View) -> some View {
if #available(iOSApplicationExtension 17.0, *) {
return containerBackground(for: .widget) {
backgroundView
}
} else {
return background(backgroundView)
}
}
}
사용할 때는 Modifier를 붙여서 사용할 수 있다.
References
- Hotfixing widgets for iOS 17: containerBackground + padding
- Adjusting Your App's Widgets to Use .containerBackground(for:)
- Widget on iOS 17 Beta device - Adopt containerBackground API
728x90
반응형
'앱 > Swift' 카테고리의 다른 글
[ReactorKit] Reactor도 disposeBag이 있을까? (0) | 2024.01.03 |
---|---|
iOS17에서의 UIGraphicsBeginImageContext 이슈 (0) | 2023.12.06 |
사내 배포를 하며 배운 3가지 팁 (0) | 2023.10.20 |
RxSwift의 observe(on:)과 DispatchQueue.main.async 언제 써야 할까 (0) | 2023.10.14 |
[Architecture] MVC -> MVVM + RxSwift로 개조하기 (0) | 2023.09.09 |
Comments