首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问@Environment(\.presentationMode)阻止PDFView出现

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

Stack Overflow用户
提问于 2020-12-20 18:05:43
回答 1查看 80关注 0票数 0

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

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

代码语言:javascript
复制
import SwiftUI

struct MainView: View {

    @State var pdfDocument: PDFDocument = PDFDocument()

    var body: some View {

        VStack {

            PDFViewer(pdfDocument: $pdfDocument)
        }
    }
}

代码语言:javascript
复制
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
    }
}

坏代码:不显示文档也不显示PDFViewer (只更改访问@Environment)

代码语言:javascript
复制
import SwiftUI

struct MainView: View {

    @Environment(\.presentationMode) var presentationMode

    @State var pdfDocument: PDFDocument = PDFDocument()

    var body: some View {

        VStack {

            PDFViewer(pdfDocument: $pdfDocument)
        }
    }
}

代码语言:javascript
复制
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
    }
}

问题:有谁能解释一下为什么访问这个环境varible会阻止子视图(pdfviewer)出现在主视图中呢?我知道PDFViewer正在被削弱,因为当它接收到数据时,我仍然会收到更新调用。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-20 18:18:14

尝试按以下方式更改PDFViewer

代码语言:javascript
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65383106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档