SwiftUI WindowGroup открывает несколько окон с одним и тем же идентификатором на iPad
Я хочу создать управляемую данными WindowGroup, чтобы мое приложение могло запускать дополнительные вспомогательные окна. Проблема в том, что на iPad WindowGroup, похоже, не знает, что конкретное окно для этого идентификатора уже открыто, поэтому открывает для него другое окно. На Mac он работает должным образом и выводит на передний план окно с тем же идентификатором.
Вот пример кода
@main
struct MultiWindowSimpleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
// the additional window
WindowGroup(id: "AnItem", for: Item.ID.self) { $anID in
if let anID, let item = Items.main.item(withID: anID ) {
Text( "\(item.id)")
}
else{
Text( "item not found!")
}
}
}
}
//: ======================================================= ://
struct ContentView: View {
let content = Items()
var body: some View {
VStack {
ForEach(content.items) { anItem in
ItemView(item: anItem )
}
}
.padding()
}
}
// Supporting content
//: ======================================================= ://
/// the Item base class
struct Item:Identifiable, Hashable, Codable{
var id:UUID = UUID()
}
//: ======================================================= ://
/// creates and holds multiple items
struct Items{
static var main:Items!
var items:[Item]
init() {
var items:[Item] = []
for _ in 0..<5{
items.append(Item())
}
self.items = items
Self.main = self
}
func item( withID id:UUID )->Item?{
return items.first(where: { $0.id == id })
}
}
//: ===================================================================================== ://
/// displays the item showing its id, and when tapped it opens the item in new window
struct ItemView:View{
@Environment(\.openWindow) private var openWindow
@Environment(\.supportsMultipleWindows) private var supportsMultipleWindows
let item:Item
var body: some View{
Text( "\(item.id)" )
.font(.system(size: 13))
.frame( maxWidth: .infinity )
.padding()
.background(.yellow)
.onTapGesture {
if supportsMultipleWindows{
openWindow(value: item.id )
}
}
}
}
Вот снимок экрана: