我正在使用 PDFKit 渲染 PDF,并使用“UIMenuController”添加了自定义菜单。但现在从 iOS 16 开始已弃用。
\n我使用以下代码删除 share\xe3\x80\x81lookup 菜单项:
\n@available(iOS 13.0, *)\nopen override func buildMenu(with builder: UIMenuBuilder) {\n builder.remove(menu: .lookup)\n builder.remove(menu: .share)\n builder.remove(menu: .replace)\n super.buildMenu(with: builder)\n}\n
Run Code Online (Sandbox Code Playgroud)\n但是,当用户长按选择 PDF 中的文本时,无法删除“突出显示”上下文菜单。有没有办法摆脱这个菜单项?以及如何在 PDFView 中使用 UIEditMenuInteraction ?
\n任何帮助将非常感激。
\niOS 上的 PDFKit 是否公开了 PDFView 的底层 UIScrollView 或者是否有任何其他方法可以直接检测用户是否滚动了 PDFView?
我的用例是在滚动文档时隐藏导航栏,因此作为一种解决方法,我已将自己的平移手势识别器添加到 PDFView 的父级,并在gestureRecognizerShouldBegin 中隐藏并始终返回 false 但我希望有更像 UIScrollViewDelegate 的东西我在文档中遗漏了。
我有一个 PDF,其中包含不同高度的页面,我希望以水平分页方式显示,一次一页,页面之间没有间隙,并且每个页面的顶部与视图的顶部对齐。例如:
我想使用PDFKit
's PDFView
,特别是因为这些设置可以通过以下方式实现:
let pdfView = PDFView()
pdfView.displayDirection = .horizontal
pdfView.displaysPageBreaks = false
pdfView.usePageViewController(true, withViewOptions: nil)
Run Code Online (Sandbox Code Playgroud)
但是,这会产生以下结果:
这是由于页面的高度不同。每个页面在 中垂直居中PDFView
,如果页面的高度大于视图的高度(例如第 2 页),则按比例缩放以适应。
为了尝试解决第一个问题,垂直偏移,我尝试了几件事。首先,这是毛,我知道这是错的,检查视图层次结构,并找到个人视图(已命名的类的观点后PDFTextInputView
,页面呈现内我已经试过调整其框架的)origin.y
到0
时最外面的滚动视图(另一个私人视图)滚动。这是因为每当下一页或上一页滚动到视图中时,页面都会呈现在视图的顶部。但是,一旦用户捏住以放大该页面,其框架会自动跳回居中。除了依赖私有视图层次结构之外,这种方法是行不通的。
为了尝试解决“高页面问题”(第 2 页),我尝试在出现新页面时调整 PDFView 的比例因子。遗憾的是,.PDFViewPageChanged
通知仅在滚动视图结束减速后才会触发,因此页面在滚动时会缩小,然后当我调整比例因子时,它会跳转以适应屏幕的宽度。然后我转向.PDFViewVisiblePagesChanged
在下一页/上一页出现时确实会触发的.PDFViewPageChanged
.
我尝试过的其他事情:
transform
文档视图pdfView.usePageViewController
)有没有人对我如何实现我所追求的有任何想法?
我知道PDFKit
允许将 text+formatting 提取为NSAttributedString
,但是我找不到有关使用 Swift 从任何 PDF 文档中提取每个单独数字的任何信息。
任何帮助将不胜感激,谢谢!
编辑:https : //stackoverflow.com/a/40788449/2303865解释了如何将整个页面转换为图像,但是我需要解析已经属于一系列 PDF 文档的所有图像,而不知道它们的位置,所以该解决方案不适用于我的问题。
我在使用pdfKit CollectionViewController
,每个单元格都有一个不同的PDF,将从文档目录中下载PDF。
当我在iOS 11下使用以下代码时,它可以正常工作。但是,当我在iOS 12上使用它时,会发生内存泄漏和随后的崩溃。
这是我得到的错误:
线程4:EXC_BAD_ACCESS(代码= 1,地址= 0x107b5401c)
这是我的代码:
func loadData(_ finame: String) {
let dbPath = finame
let url = URL(fileURLWithPath: dbPath)
if let pdfDocument = PDFDocument(url: url) {
self.pdfView.document = pdfDocument
self.pdfView.autoScales = true
self.pdfView.maxScaleFactor = 4.0
self.pdfView.minScaleFactor = pdfScaleFactor
if #available(iOS 12.0, *) {
self.pdfView.pageShadowsEnabled = false
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我正在尝试将自定义属性添加到 pdf 文档元数据,但在savedocument(document)后,自定义属性未添加到文档中。
@IBOutlet weak var pdfContainerView: PDFView!
private func setDocumentAttributes(){
if let document = pdfContainerView.document{
var attributes = document.documentAttributes
attributes!["NewAttribute"] = "Test"
document.documentAttributes = attributes
savedocument(document)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试UIMenuItem
为我的PDFView
这是我在示例 Xcode 项目中所做的
#import <PDFKit/PDFKit.h>
#import <objc/runtime.h>
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic) PDFDocument *document;
@property(nonatomic) PDFView *pdfView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
NSURL *pdfPath = [[NSBundle mainBundle] URLForResource:@"pdf" withExtension:@"pdf"];
_document = [[PDFDocument alloc] initWithURL:pdfPath];
_pdfView = [[PDFView alloc] initWithFrame:CGRectZero];
_pdfView.document = _document;
[self.view addSubview:_pdfView];
_pdfView.translatesAutoresizingMaskIntoConstraints = NO;
[_pdfView.topAnchor constraintEqualToAnchor:self.view.topAnchor].active = YES;
[_pdfView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor].active = YES;
[_pdfView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES;
[_pdfView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES; …
Run Code Online (Sandbox Code Playgroud) My code works in iOS 12. But after upgrading to iOS 13, it does not work.
let pinPointRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.pinPoint(sender:)))
pinPointRecognizer.numberOfTapsRequired = 1
self.pdfView.addGestureRecognizer(pinPointRecognizer)
Run Code Online (Sandbox Code Playgroud)
I have tried adding the pinPointRecognizer.numberOfTouchesRequired = 2
and it can trigger pinPoint()
function. But I want to trigger pinPoint()
in a single tap.
Is this behaviour a bug that will be fixed in the future iOS version? Is there a workaround to fix this?
Thanks!
Updated:
Thank you all for your reply! …
我正在开发一个需要显示相当大的 PDF 文件的应用程序。我使用 PDFKits PDFView 来实现此目的,然后将其包装在 UIViewRepresentable 中。问题是,设置时PDFView.autoScales = true
我在启动时出错。该应用程序仍然可以运行,自动缩放功能也可以运行,但我仍然想修复该错误。我还应该提到,在 iOS 开发方面,我完全是一个初学者。
这是我的 makeUIView 的实现:
func makeUIView(context: UIViewRepresentableContext<PDFKitRepresentedView>) -> PDFKitRepresentedView.UIViewType {
let pdfView = PDFView()
pdfView.autoScales = true
pdfView.pageBreakMargins.top = 0.0
pdfView.pageBreakMargins.bottom = 0.0
pdfView.pageShadowsEnabled = false
pdfView.document = PDFDocument(url: self.url)
return pdfView
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
[Assert] -[UIScrollView _clampedZoomScale:allowRubberbanding:]: Must be called with non-zero scale
[Unknown process name] CGAffineTransformInvert: singular matrix.
Run Code Online (Sandbox Code Playgroud)
每当 PDFView 初始化时,它们似乎都会被打印。有什么想法可能是什么问题吗?
自从升级到 iPadOS 16 以来,Xcode 的控制台已经充满了诸如[VKImageAnalyzer processRequest:] returned 0
或 之类的消息[VKImageAnalyzer processRequest:] block returned NULL analysis
- 这发生在模拟器中,并且在物理设备上我收到有关字体的警告,例如CoreText performance note: Client called CTFontCreateWithName() using name "Times-Roman" and got font with PostScript name "TimesNewRomanPSMT". For best performance, only use PostScript names when calling this API.
我的应用程序使用 PDFKit 显示乐谱的 PDF 文件,因此 iOS 16 中引入的 PDF 文件的自动图像分析与其完全无关。除了向控制台发送垃圾邮件之外,此功能还会消耗不必要的资源。
我找不到任何有关禁用 PDFKit 中自动 PDF 分析的方法的文档。任何想法都会非常受欢迎。
ios-pdfkit ×10
ios ×8
swift ×5
apple-pdfkit ×2
ios13 ×2
ios16 ×2
cocoa-touch ×1
ipados16 ×1
objective-c ×1
ocr ×1
pdf ×1
swiftui ×1
uikit ×1
visionkit ×1