popup window don't react to touch on iOS 18, works fine on iOS 17, this is the code:
import SwiftUI
extension View {
public func popup<Content, Item>(
item: Binding<Item?>,
onDismiss: (() -> Void)? = nil,
@ViewBuilder content: @escaping (Item) -> Content
) -> some View where Content: View, Item: Equatable {
return self.overlay(
PopupWrapper(item: item, onDismiss: onDismiss, content: content)
)
}
}
struct PopupWrapper<Content, Item>: View where Content: View, Item: Equatable {
@Binding var item: Item?
var onDismiss: (() -> Void)?
var content: (Item) -> Content
@State var isAnimating = false
var body: some View {
Group {
if let item {
ZStack {
Color.black
.opacity(0.3)
.ignoresSafeArea()
.contentShape(Rectangle())
.gesture(
TapGesture().onEnded {
withAnimation(.spring(duration: 0.2)) {
isAnimating = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
dismiss()
}
}
}
)
content(item)
.scaleEffect(isAnimating ? 1 : 0.3)
.opacity(isAnimating ? 1 : 0)
.onAppear {
withAnimation(.spring(duration: 0.3)) {
isAnimating = true
}
}
.gesture(
TapGesture().onEnded {
withAnimation(.spring(duration: 0.2)) {
isAnimating = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
dismiss()
}
}
}
)
.onDisappear {
dismiss()
}
}
} else {
EmptyView()
}
}
}
func dismiss() {
item = nil
isAnimating = false
onDismiss?()
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI