Swift 访问@Environment(\.presentationMode)阻止PDFView出现

Swift 访问@Environment(\.presentationMode)阻止PDFView出现,swift,swiftui,pdfview,swiftui-environment,Swift,Swiftui,Pdfview,Swiftui Environment,问题:访问@Environment(.presentationMode)会阻止显示我的PDFView 工作代码:在MainView中通过PDFViewer显示pdf文档 import SwiftUI struct MainView: View { @State var pdfDocument: PDFDocument = PDFDocument() var body: some View { VStack { PDFViewer(

问题:访问@Environment(.presentationMode)会阻止显示我的PDFView

工作代码:在MainView中通过PDFViewer显示pdf文档

import SwiftUI

struct MainView: View {

    @State var pdfDocument: PDFDocument = PDFDocument()

    var body: some View {

        VStack {

            PDFViewer(pdfDocument: $pdfDocument)
        }
    }
}

坏代码:不显示文档或PDFViewer(唯一的更改是访问@Environment


问题:有人能解释为什么访问此环境变量会阻止childview(pdfviewer)出现在主视图中吗?我知道PDFViewer正在初始化,因为当它接收数据时,我仍然会收到更新调用

我的计划是使用presentationMode以编程方式弹出视图


提前感谢。

尝试更改
PDFViewer
如下

struct PDFViewer: UIViewRepresentable {

    @Binding var pdfDocument: PDFDocument

    func makeUIView(context: Context) -> PDFView {
        let pdfView = PDFView()
        pdfView.document = pdfDocument
        pdfView.autoScales = true
        return pdfView
    }

    func updateUIView(_ uiView: PDFView, context: Context) {
        print("update view called")
        uiView.document = pdfDocument
    }
}

完美的这很有效。我不明白为什么旧版本不起作用?为什么指定返回类型会有所不同?在您的案例中,PDFView是在my-is中重新创建的,不是..非常感谢!
import SwiftUI

struct MainView: View {

    @Environment(\.presentationMode) var presentationMode

    @State var pdfDocument: PDFDocument = PDFDocument()

    var body: some View {

        VStack {

            PDFViewer(pdfDocument: $pdfDocument)
        }
    }
}
import SwiftUI
import PDFKit

struct PDFViewer UIViewRepresentable {

    @Binding var pdfDocument: PDFDocument
    let pdfView = PDFView()

    func makeUIView(context: Context) -> some UIView {
        pdfView.document = pdfDocument
        pdfView.autoScales = true
        return pdfView
    }

    func updateUIView(_ uiView: UIViewType, context: Context) {
        print("update view called")
        pdfView.document = pdfDocument
    }
}
struct PDFViewer: UIViewRepresentable {

    @Binding var pdfDocument: PDFDocument

    func makeUIView(context: Context) -> PDFView {
        let pdfView = PDFView()
        pdfView.document = pdfDocument
        pdfView.autoScales = true
        return pdfView
    }

    func updateUIView(_ uiView: PDFView, context: Context) {
        print("update view called")
        uiView.document = pdfDocument
    }
}