访问 @Environment(\.presentationMode) 阻止 PDFView 出现
Accessing @Environment(\.presentationMode) stopping PDFView from appearing
问题:访问@Environment(.presentationMode) 会阻止我的 PDFView 显示。
工作代码:在 MainView 中通过 PDFViewer 显示 pdf 文档
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
}
}
损坏的代码:不显示文档或 PDFViewer(唯一的变化是访问@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
}
}
问题: 任何人都可以阐明为什么访问此环境变量似乎会阻止子视图 (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
}
}
问题:访问@Environment(.presentationMode) 会阻止我的 PDFView 显示。
工作代码:在 MainView 中通过 PDFViewer 显示 pdf 文档
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
}
}
损坏的代码:不显示文档或 PDFViewer(唯一的变化是访问@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
}
}
问题: 任何人都可以阐明为什么访问此环境变量似乎会阻止子视图 (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
}
}