Problem: Accessing @Environment(.presentationMode) stops my PDFView from being shown.
Working Code: Displays a pdf document via PDFViewer within MainView
import SwiftUI
struct MainView: View {
@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
}
}
Broken Code: Doesnt display the document nor PDFViewer (only change is accessing @Environment)
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
}
}
Question: Can anyone shed any light as to why accessing this environment varible appears to be stopping the childview (pdfviewer) from appearing in the main view? I know that PDFViewer is being initalised because I still get update calls when it receives data.
My plan is to use the presentationMode to pop the view programmatically.
Thanks in advance.
Try to change
PDFViewer
as follows