Непонятно из вопроса, в какой среде и что именно происходит странно , потому что при проверке предоставленный код хорошо работает с Xcode 11.2 / 3 + и iOS13.2 +.
В любом случае, существует альтернативный подход к закрытию всплывающих окон с использованием \.presentationMode
, как показано ниже
Обновление: Что ж, я обнаружил, что оригинальный вопрос, вероятно, касается macOS
, потому что в macOS есть поповер не закрыт с описанным сценарием.
Вот вариант использования для обеих платформ iOS / macOS (протестировано и работает с Xcode 11.3 / macOS 10.15)
struct Pop: View {
@Binding var showSheet: Bool
//@Environment(\.presentationMode) var presentationMode
var body: some View {
VStack {
Text("Option 1")
Text("Option 2")
Button("Cancel")
{
#if os(OSX)
NSApp.sendAction(#selector(NSPopover.performClose(_:)), to: nil, from: nil)
#else
//self.presentationMode.wrappedValue.dismiss() // << behaves the same as below
self.showSheet = false
#endif
}
}
}
}