SwiftUI:调整弹出框的大小以适合

nik*_*ers 9 xcode popover swift swiftui

我有一个小弹出框示例,其中一个按钮会触发一个弹出框。弹出框只包含一点 UI,在这种情况下是两个按钮,但它仍然占用了大量空间,而不是像我习惯的 UIKit 那样整齐地环绕内容。如何使弹出框适合内容的大小?

iPad 模拟器的屏幕截图和以下代码:

弹出窗口打开时按钮的屏幕截图

struct ContentView: View {

    @State private var showingPopupA = false

    var body: some View {
        HStack {
            Button(action: {
                self.showingPopupA.toggle()
            }, label: {
                Text("Button")
            }).popover(isPresented: self.$showingPopupA) {
                VStack {
                    Button(action: {
                        // Do something
                        self.showingPopupA = false
                    }) {
                        Text("Option A")
                    }
                    Button(action: {
                        // Do something
                        self.showingPopupA = false
                    }) {
                        Text("Option B")
                    }
                }.background(Color.red)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

macOS 截图: 使用 Xcode 11.0 构建的 macOS 屏幕截图

Mar*_* T. 4

在 macOS 上,下面的代码将如下所示:

在此输入图像描述

struct PopoverExample: View {

    @State private var showingPopupA:Bool = false 
    var body: some View {
        HStack {
            Button(action: {
                self.showingPopupA.toggle()
            }, label: {
                Text("Button")
            }).popover(isPresented: self.$showingPopupA) {
                VStack {
                    Button(action: {
                        // Do something
                        self.showingPopupA = false
                    }) {
                        Text("Option A")
                    }
                    Button(action: {
                        // Do something
                        self.showingPopupA = false
                    }) {
                        Text("Option B")
                    }
                }.background(Color.red)
            }
        }
        .frame( maxWidth: .infinity, maxHeight: .infinity)
    }
}
Run Code Online (Sandbox Code Playgroud)

项目链接

  • 你的例子也适用于我,但是你用“List”尝试过这个吗?在这种情况下,弹出窗口非常小,不适合“列表”。 (3认同)
  • @Lupurus我在尝试使用“List”时也有同样的经历,但发现在“ScrollView”内使用“VStack”模拟“List”并使用“Divider”视图适合我的情况。要点 https://gist.github.com/mluton/c70bac24d6d01db06c93b8d0857dd0f7 (2认同)