访问 @Environment(\.presentationMode) 阻止 PDFView 出现
Posted
技术标签:
【中文标题】访问 @Environment(\\.presentationMode) 阻止 PDFView 出现【英文标题】:Accessing @Environment(\.presentationMode) stopping PDFView from appearing访问 @Environment(\.presentationMode) 阻止 PDFView 出现 【发布时间】:2020-12-20 18:05:43 【问题描述】:问题:访问@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
Broken Code:不显示文档也不显示 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以编程方式弹出视图。
提前致谢。
【问题讨论】:
【参考方案1】:尝试如下更改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 被重新创建,在我的 - 不是..以上是关于访问 @Environment(\.presentationMode) 阻止 PDFView 出现的主要内容,如果未能解决你的问题,请参考以下文章
我如何在swiftui中从我的应用程序中的任何视图访问这个:@Environment(\.managedObjectContext) var context? [关闭]
js跨域访问,No 'Access-Control-Allow-Origin' header is present on the requested resource
jQuery 跨域访问的三种方式 No 'Access-Control-Allow-Origin' header is present on the reque
浏览器禁止跨域访问及解决: No 'Access-Control-Allow-Origin' header is present on the requested resource.