我正在使用WKWebView中的viewPrintFormatter()打印一些超文本标记语言。
我有一个CustomPrintPageRenderer,它是UIPrintPageRenderer的子类,它将paperRect和printableRect设置为595.2x841.8,将footer设置为50。
我调用此代码从WKWebView生成PDF。
private func createPDF(_ formatter: UIViewPrintFormatter) {
// Our custom print renderer sets it's size and footer automatically
let render = CustomPrintPageRenderer.init()
render.addPrintFormatter(formatter, startingAtPageAt: 0)
// Create PDF context and draw
let pdfData = NSMutableData()
let rect = CGRect.init(x: 0, y: 0, width: 595.2, height: 841.8)
UIGraphicsBeginPDFContextToData(pdfData, rect, nil)
for i in 0..<render.numberOfPages {
UIGraphicsBeginPDFPage();
render.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext();
self.completion?(.success(pdfData as Data))
}这一切在iPhone模拟器上都工作得很好,但是当我在iPad模拟器上使用它(具体地说,我正在测试iPad专业版11英寸的第二代)时,生成的PDF会爬到第二页上。
将页面底部的一行文本移到页面2上。
为什么这会在iPad和iPhone上有所不同,因为WKWebView实际上不使用任何帧,因为它没有显示在屏幕上。看起来iPad可能忽略了其计算中的页脚。
我能做些什么来纠正这种行为呢?
会不会是苹果的bug?
发布于 2020-04-20 02:30:10
同意,我不确定为什么在iPad上和在iPhone上会有什么不同。如果您正在寻找一种快速的解决方法,也许可以尝试检测设备是否为iPad,然后相应地调整rect:
if UIDevice.current.userInterfaceIdiom == .pad {
/*put your adjusting code here*/
}将需要使用RECT值的变量(并在上面的if函数中编辑它们),而不是直接的数字。
https://stackoverflow.com/questions/61307783
复制相似问题