Open5
[SwiftUI]カスタムalert
通常のalertではなくカスタムviewでalertを表示したい場合、2通りの方法がある。
(要件として、SafeAreaまで含む全画面に半透明のViewを表示する必要がある)
- RootViewでZStackなどで切り替える方法
-
fullScreenCover
を使う
【SwiftUI】フルスクリーンでモーダル表示する【fullScreenCover】 – .NET ゆる〜りワーク
→fullScreenCover
を使う方法
.fullScreenCover(isPresented: $isPresented) {
CustomAlertView(isPresented: $isPresented)
}
アニメーションが入っているので、アニメーションをOffにする。
SwiftUI: fullScreenCover with no animation? - Stack Overflow
.transaction { transaction in
transaction.disablesAnimations = true
}
今のfullScreenCover
では、背景を透過させる設定がないので、UIViewRepresentable
を使用する。
【SwiftUI】sheetの背景を透過させる方法 | DevelopersIO
[Resolve]-Is there a way to set a fullScreenCover background opacity?
struct BackgroundCleanerView: UIViewRepresentable {
func makeUIView(context: Context) -> UIView {
let view = UIView()
DispatchQueue.main.async {
view.superview?.superview?.backgroundColor = .clear
}
return view
}
func updateUIView(_ uiView: UIView, context: Context) {}
}
struct BackgroundCleanerView_Previews: PreviewProvider {
static var previews: some View {
BackgroundCleanerView()
}
}