我正在开发一个使用 PDFKit 显示 PDF 的应用程序,并且我需要能够设置最小缩放级别 - 否则用户只能永远缩小。我尝试设置 minScaleFactor
和 maxScaleFactor
,由于它们关闭 autoScales
,我需要设置 scaleFactor
> 到 pdfView.scaleFactorForSizeToFit
。但是,此设置不会产生与 autoScales
相同的开始缩放,并且尽管更改了实际的 scaleFactor
数字,但开始缩放并没有改变。这张照片启用了 autoScales
:
[![打开自动缩放功能的图像][1]][1]
然后当我使用scaleFactorForSizeToFit
时会发生什么:
[![带有scaleFactorForSizeToFit的图像][2]][2]
引用苹果文档中的scaleFactorForSizeToFit
,这是
"size to fit" scale factor that autoScales would use for scaling the current document and layout.
我已将代码粘贴在下面。感谢您的帮助。
import PDFKit
import SwiftUI
import Combine
class DataLoader : ObservableObject {
@Published var data : Data?
var cancellable : AnyCancellable?
func loadUrl(url: URL) {
cancellable = URLSession.shared.dataTaskPublisher(for: url)
.map { $0.data }
.receive(on: RunLoop.main)
.sink(receiveCompletion: { (completion) in
switch completion {
case .failure(let failureType):
print(failureType)
//handle potential errors here
case .finished:
break
}
}, receiveValue: { (data) in
self.data = data
})
}
}
struct PDFSwiftUIView : View {
@StateObject private var dataLoader = DataLoader()
var StringToBeLoaded: String
var body: some View {
VStack {
if let data = dataLoader.data {
PDFRepresentedView(data: data)
.navigationBarHidden(false)
} else {
CustomProgressView()
//.navigationBarHidden(true)
}
}.onAppear {
dataLoader.loadUrl(url: URL(string: StringToBeLoaded)!)
}
}
}
struct PDFRepresentedView: UIViewRepresentable {
typealias UIViewType = PDFView
let data: Data
let singlePage: Bool = false
func makeUIView(context _: UIViewRepresentableContext<PDFRepresentedView>) -> UIViewType {
let pdfView = PDFView()
// pdfView.autoScales = true
// pdfView.maxScaleFactor = 0.1
pdfView.minScaleFactor = 1
pdfView.scaleFactor = pdfView.scaleFactorForSizeToFit
pdfView.maxScaleFactor = 10
if singlePage {
pdfView.displayMode = .singlePage
}
return pdfView
}
func updateUIView(_ pdfView: UIViewType, context: UIViewRepresentableContext<PDFRepresentedView>) {
pdfView.document = PDFDocument(data: data)
}
func canZoomIn() -> Bool {
return false
}
}
struct ContentV_Previews: PreviewProvider {
static var previews: some View {
PDFSwiftUIView(StringToBeLoaded: "EXAMPLE_STRING")
.previewInterfaceOrientation(.portrait)
}
}
最佳答案
可能和顺序有关。这似乎对我有用:
pdfView.scaleFactor = pdfView.scaleFactorForSizeToFit
pdfView.maxScaleFactor = 10.0
pdfView.minScaleFactor = 1.0
pdfView.autoScales = true
关于swift - PDFKit 的scaleFactorForSizeToFit 无法在 SwiftUI (UIViewRepresentable) 中设置缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72064180/