iOS PDFView вызывает базовое утверждение, когда для автоматического масштабирования установлено значение true

#ios #swift #swiftui #uikit #ios-pdfkit

#iOS #swift #swiftui #uikit #ios-pdfkit

Вопрос:

Я работаю над приложением, которое должно отображать довольно большой файл 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
}
 

И это ошибка:

 [Assert] -[UIScrollView _clampedZoomScale:allowRubberbanding:]: Must be called with non-zero scale
[Unknown process name] CGAffineTransformInvert: singular matrix.
 

Похоже, они печатаются всякий раз, когда инициализируется PDFView. Есть идеи, в чем может быть проблема?

Комментарии:

1. Если это не влияет на функциональность приложения, игнорируйте его — это внутренние компоненты UIKit.

2. Я согласен, игнорирование этого, вероятно, не проблема. Сообщения, появляющиеся в консоли из внутренних компонентов системы, не редкость. Но попробуйте установить значение autoScales равным true после установки документа и полей.

3. @CenkBilgen, к сожалению, не помогло, но хорошо, я пока проигнорирую это, спасибо.

Ответ №1:

Я столкнулся с той же проблемой, и сейчас я ее исправил.

Ваш PDFView должен сначала установить фрейм.Вы можете указать любое значение.

 let pdfView = PDFView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))   
self.view.addSubview(pdfView)
 

Теперь все в порядке, а затем устраните ошибку

Ответ №2:

В итоге я просто проигнорировал его. Кажется, работает нормально.