【问题标题】:How to make a SwiftUI .sheet() size match the width/height of window on MacOS?如何使 SwiftUI .sheet() 大小与 MacOS 上窗口的宽度/高度匹配?
【发布时间】:2021-02-15 22:53:49
【问题描述】:

背景

我正在 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 所示。

问题

如何让工作表视图与窗口的大小(没有最大宽度或高度)相匹配,以便用户仍然可以调整窗口大小,但确保工作表始终占据整个窗口.

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    一种解决方案是使用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)
                            }
    
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2014-05-07
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多