Swift 访问@Environment(\.presentationMode)阻止PDFView出现
问题:访问@Environment(.presentationMode)会阻止显示我的PDFView 工作代码:在MainView中通过PDFViewer显示pdf文档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(
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
}
}