【问题标题】:Swiftui push to full screen SFSafariViewController from half model sheetSwiftui 从半模型表推送到全屏 SFSafariViewController
【发布时间】:2022-07-27 23:36:53
【问题描述】:

我想从半个模型表推送到全屏 SFSafariViewController。

我想要的是首先呈现一个带有“Link Btn”的表格,单击“Link Btn”以推送到全屏网页视图以显示网页,如下所示:

我的代码如下:

import SwiftUI
import SafariServices

struct ContentView: View {
    @State private var showingVC = false
    var body: some View {
        NavigationView() {
            VStack() {
                Button(action: {
                    self.showingVC = true
                }, label: {
                    Text("Show sheet")
                })
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .background(Color.gray.opacity(0.2))
            .sheet(isPresented: $showingVC) {
                PresentView()
            }
        }
        
    }
}

struct PresentView: View {
    var body: some View {
        NavigationView() {
            VStack() {
                NavigationLink(destination: SafariView(url: URL(string: "https://github.com/")!)) {
                    Text("Link btn")
                        .foregroundColor(.blue)
                }
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .background(Color.gray.opacity(0.2))
        }
    }
}

struct SafariView: UIViewControllerRepresentable {
    let url: URL
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<SafariView>) -> SFSafariViewController {
        return SFSafariViewController(url: url)
    }

    func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SafariView>) {

    }
}

但最终的网页不是全屏的,并且有两个导航栏,如下所示:

如何从显示的工作表视图中推送到只有一个导航栏的全屏 web 视图?

【问题讨论】:

  • @Asperi 这里有一个新问题需要你的帮助~
  • $1000 :P ........

标签: swift swiftui wkwebview swiftui-navigationlink swiftui-navigationview


【解决方案1】:

需要的不是链接而是fullScreenCover,比如

struct PresentView: View {
    @State private var showSafari = false
    var body: some View {
        NavigationView() {
            VStack() {
                Button {
                    showSafari.toggle()    // << here !!
                } label: {
                    Text("Link btn")
                }
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .background(Color.gray.opacity(0.2))
            .fullScreenCover(isPresented: $showSafari) {  
                SafariView(url: URL(string: "https://github.com/")!)  // << here !!
            }
        }
    }
}

使用 Xcode 13.4 / iOS 15.5 测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2022-11-14
    • 2019-11-04
    • 2021-01-18
    • 2019-02-12
    相关资源
    最近更新 更多