SwiftUI 中如何关闭 PDFView 的页面阴影?
数据阿明
结论
将 PDFView 的 pageShadowsEnabled 设为 false,可以关闭 PDF 页面边缘的阴影:
pdfView.pageShadowsEnabled = false
题目中的 layer.shadowOpacity、layer.shadowRadius 和 layer.shadowOffset 控制的是 PDFView 视图图层的阴影。页面阴影由 PDFKit 绘制,因此修改这些图层属性不会关闭页面阴影。Apple 的 PDFView API 将 pageShadowsEnabled 定义为控制页面边缘阴影的属性,该属性从 iOS 12 起可用。Apple PDFView 文档
在 UIViewRepresentable 中设置
创建 PDFView 时设置该属性:
import PDFKit
import SwiftUI
struct PDFKitView: UIViewRepresentable {
let data: Data
func makeUIView(context: Context) -> PDFView {
let pdfView = PDFView()
pdfView.document = PDFDocument(data: data)
pdfView.autoScales = false
pdfView.scaleFactor = 1.0
pdfView.displayMode = .singlePageContinuous
pdfView.displayDirection = .vertical
pdfView.backgroundColor = .clear
pdfView.pageShadowsEnabled = false
return pdfView
}
func updateUIView(_ uiView: PDFView, context: Context) {}
}
兼容较早的系统版本
pageShadowsEnabled 从 iOS 12 起可用。若应用还支持 iOS 12 之前的版本,可以通过可用性检查来设置:
if #available(iOS 12.0, *) {
pdfView.pageShadowsEnabled = false
}
关闭页面阴影后如果仍能看到边缘效果,可以检查 PDF 页面本身是否绘制了边框或阴影。pageShadowsEnabled 只控制 PDFKit 为页面边缘绘制的阴影。
备注:内容仅供参考。
