微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SafariView仅加载一个网址,似乎无法加载另一个网址

如何解决SafariView仅加载一个网址,似乎无法加载另一个网址

我想在应用程序内的Safari浏览器中加载特定的网页(即不在应用程序外部),并且它应该存在于相同的safari环境中,即没有常规的网页视图。

我有这个SafariView可以在SwiftUI中启用它。

现在,我想从同一场景加载不同的网址(数字可能有所不同,可以为0到20位数)。

当我打开SafariViews时,虽然只打开了第一个URL。当我单击第二个按钮时,第一个网址再次加载。

import SwiftUI
import SafariServices

struct ContentView: View {
  @State private var showSafari = false
  
  var body: some View {
    vstack {
      Button(action: {
        showSafari = true
      }) {
        Text("Apple")
          .padding()
      }
      .fullScreenCover(isPresented: $showSafari) {
        SafariView(url: URL(string: "http://www.apple.com")!)
      }
      
      Button(action: {
        showSafari = true
      }) {
        Text("Google")
          .padding()
      }
      .fullScreenCover(isPresented: $showSafari) {
        SafariView(url: URL(string: "http://www.google.com")!)
      }
    }
  }
}

struct SafariView: UIViewControllerRepresentable {
  var url: URL
  
  func makeUIViewController(
    context: UIViewControllerRepresentableContext<SafariView>
  ) -> SFSafariViewController {
    return SFSafariViewController(url: url)
  }
  
  func updateUIViewController(
    _ uiViewController: SFSafariViewController,context: UIViewControllerRepresentableContext<SafariView>
  ) {}
}

在另一个场景中,我正在创建2个单独的showSafari变量,它似乎可以正常工作,但是在那种情况下,只显示2个硬编码的URL。

在这种safari实施中是否缺少某些内容,还是可能需要通过创建showSafari布尔数组来解决此问题?

解决方法

尝试使用.fullScreenCover(item:content:)

struct ContentView: View {
    @State private var safariURL: String?

    var body: some View {
        VStack {
            Button(action: {
                safariURL = "http://www.apple.com"
            }) {
                Text("Apple")
                    .padding()
            }

            Button(action: {
                safariURL = "http://www.google.com"
            }) {
                Text("Google")
                    .padding()
            }
        }
        .fullScreenCover(item: $safariURL) {
            if let url = URL(string: $0) {
                SafariView(url: url)
            }
        }
    }
}

请注意,您需要在Identifiable中传递一些item变量。一种可能的解决方案是使String符合Identifiable

extension String: Identifiable {
    public var id: Self { self }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?