如何在 SwiftUI 应用程序中以椭圆形加载网页与在 safari 中加载

问题描述 投票:0回答:2

我想要创建的功能是 ESPN 应用程序在您单击其中一个警报时执行的操作...它会加载应用程序,但不是格式化视图,而是在应用程序上加载可以点击的 Safari 视图(老实说,我讨厌这种情况,但在这样的情况下它会很好用。)

当前代码供参考

Button(action: {
                openURL(URL(string: "linkhere")!)
    }) {
                Image("LISTENMENU")
            }

我是否需要设置另一个视图并自己构建 webkitview 或者可以通过其他方式指定此功能? (也许通过修改 openURL 字符串

swiftui webkit
2个回答
3
投票

您需要将 SFSafariViewController(来自 UIKit)包装到 SwiftUI 中,因为目前无法在本机执行此操作。您应该使用 UIViewControllerRepresentable 来执行此操作。

import SwiftUI
import SafariServices

struct MyView: View {
    @State var showStackoverflow:Bool = false

    var body: some View {
        Button(action: { self.showStackoverflow = true }) {
            Text("Open stackoverflow")
        }
        .sheet(isPresented: self.$showStackoverflow) {
            SFSafariViewWrapper(url: URL(string: "https://stackoverflow.com")!)
        }
    }
}
struct SFSafariViewWrapper: UIViewControllerRepresentable {
    let url: URL
    func makeUIViewController(context: UIViewControllerRepresentableContext<Self>) -> SFSafariViewController {
        return SFSafariViewController(url: url)
    }
    func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SFSafariViewWrapper>) {
        return
    }
}

0
投票

如果你想用简单的方法来做。这也适用于 SwiftUI。

   UIApplication.shared.open(URL(string: "https://www.google.com")!)
© www.soinside.com 2019 - 2024. All rights reserved.