SwiftUI中的PDFView会产生不必要的阴影效果
我想渲染一段内容的预览,稍后在列表中显示。我要能够在后续对预览进行缩放,因此我把预览创建为一个PDFContext,像这样:
func createPDFPreview() -> Data? {
var mediaBox = CGRect(x: 0, y: absoluteMin, width: width, height: effectiveHeight)
let pdfData = NSMutableData()
guard let pdfContext = CGContext(consumer: CGDataConsumer(data: pdfData as CFMutableData)!, mediaBox: &mediaBox, nil) else {
return (nil,nil)
}
pdfContext.beginPDFPage(nil)
pdfContext.setFillColor(.white)
pdfContext.beginPath()
pdfContext.addRect(mediaBox)
pdfContext.fillPath()
pdfContext.setFillColor(CGColor(gray: 0, alpha: 1))
// some actual drawing
pdfContext.endPDFPage()
pdfContext.closePDF()
return (pdfData as Data)
}
接着我创建一个UIViewRepresentable,如下:
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.layer.shadowOpacity = 0
pdfView.layer.masksToBounds = true
pdfView.layer.shadowRadius = 0
pdfView.layer.shadowOffset = .zero
pdfView.layer.backgroundColor = UIColor.clear.cgColor
}
return pdfView
}
func updateUIView(_ uiView: PDFView, context: Context) {}
}
然后这个视图被使用在ListCell中,如下:
public struct TKExerciseListCell: View {
let exercise: TKExercise
public var body: some View {
PDFKitView(data: exercise.pdfPreview!)
}
}
我的问题是:PDFKitView的边框周围会绘制一个阴影,我无论如何都去不掉。我尝试把shadowRadius设为0,把opacity设为0,在所有可能的位置都尝试过,但均无效。 所有父视图的背景色都设为与PDF使用的颜色相同的白色(.white)。
如何在不产生阴影的情况下绘制此视图,使其边框实际不可见?
解决方案
那个阴影其实是PDF页面的阴影。它的作用是告诉你页面边缘在哪里。
你可以通过下面的方式将其禁用:
pdfView.pageShadowsEnabled = false
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。