Swiftui 仅仅声明环境变量openURL就会导致popover行为不稳定

Swiftui 仅仅声明环境变量openURL就会导致popover行为不稳定,swiftui,popover,openurl,Swiftui,Popover,Openurl,如下面的示例代码所示。在不声明openURL变量的情况下运行时,popover将正确显示。取消对行的注释,它会出现在错误的位置,并且拒绝被驳回。我真的可以用一个修复/工作来解决 struct Popover: View { @State var isShowingPopover = false // @Environment(\.openURL) var openURL var body: some View { Text("Content&qu

如下面的示例代码所示。在不声明openURL变量的情况下运行时,popover将正确显示。取消对行的注释,它会出现在错误的位置,并且拒绝被驳回。我真的可以用一个修复/工作来解决

struct Popover: View {
    @State var isShowingPopover = false
//    @Environment(\.openURL) var openURL

    var body: some View {
        Text("Content")
        .toolbar {
            ToolbarItemGroup(placement: .primaryAction) {
                Button("Popover") {
                    isShowingPopover.toggle()
                }
                .popover(isPresented: $isShowingPopover) {
                    Button(action:{
//                        openURL(URL(string: "https://cnn.com")!)
                    }){
                        Label("Open CNN", systemImage: "hand.thumbsup")
                    }
                        .padding()
                }
            }
        }
    }
}


struct Popover_Previews: PreviewProvider {
    static var previews: some View {
        NavigationView{
            Text("Sidebar")
            Popover()
        }
    }
}

出现
工具栏
缺陷。。。使用
navigationBarItems
效果很好

使用Xcode 12.1/iOS 14.1进行测试

struct PopoverView: View {
    @State var isShowingPopover = false
    @Environment(\.openURL) var openURL

    var body: some View {
        Text("Content")
            .navigationBarItems(trailing:
                 Button("Popover") {
                      isShowingPopover.toggle()
                 }
                 .popover(isPresented: $isShowingPopover) {
                      Button(action:{
                            openURL(URL(string: "https://cnn.com")!)
                      }){
                            Label("Open CNN", systemImage: "hand.thumbsup")
                      }
                            .padding()
                 })
    }
}

如果您的目标是iOS 14及更高版本,您可以尝试使用
链接
,而不是使用
打开URL
按钮。这主意不错,但将URL链接放在菜单中似乎也不起作用!我收回那句话。。。没有在模拟器中工作,但在设备上工作…不知道菜单是什么意思,我指的是。很有帮助,谢谢。