背景
我正在 Catalina 上的 Xcode 12.4 中的 SwiftUI 中开发 MacOS 应用程序。现在我的应用有一个带有磁贴的登录页面,每个磁贴都包含一个使用表格显示的功能。
ForEach(MenuItem.allCases) { menuItem in
Button(action: {
detailView = menuItem
}) {
Tile(labelText: menuItem.menuText, icon: menuItem.menuIcon)
.sheet(item: $detailView) { item in
FeatureView(dismissFeatureView: { self.detailView = nil }, menuItem: item)
.environmentObject(container)
.background(Color("backgroundMain"))
}
}
}
窗口具有最小宽度和高度,但可以扩展,因为它没有最大高度或宽度。我正在寻找一种方法让工作表占据整个屏幕。在 iOS 上,您可以使用 .fullScreenCover()
,但在 MacOS 上不可用。所以现在,当我放大屏幕并点击磁贴 the sheet view doesn't take up the entire space 时。
此外,用户可以将工作表的大小调整为超出窗口的大小,如 here 所示。
问题
如何使工作表视图与窗口的大小(没有最大宽度或高度)相匹配,以便用户仍然可以调整窗口大小,但要确保工作表始终占据整个窗口.
答案 0 :(得分:0)
一种解决方案是使用 GeometryReader
获取父视图的大小,并将其应用于工作表的框架。见下面的代码:
GeometryReader { geometry in
VStack(alignment: .center) {
HStack(alignment: .center, spacing: 20) {
ForEach(MenuItem.allCases) { menuItem in
Button(action: {
detailView = menuItem
}) {
Tile(labelText: menuItem.menuText, icon: menuItem.menuIcon)
.sheet(item: $detailView) { item in
FeatureView(dismissFeatureView: { self.detailView = nil }, menuItem: item)
.environmentObject(container)
.background(Color("backgroundMain"))
.frame(width: geometry.size.width, height: geometry.size.height)
}
}
}
}
}
}