Я использую PDFKit для отображения простых PDF-файлов. Когда я показываю их на экране внутри UIView, я использовал приведенный ниже код.
Цели: - Начните с содержимого, чтобы заполнить вид - хотите заполнить весь экран по ширине
override func viewDidLoad() {
super.viewDidLoad()
if let path = Bundle.main.path(forResource: "Disclaimer", ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
pdfView.document = pdfDocument
pdfView.autoScales = true
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
pdfView.displayMode = .singlePageContinuous
pdfView.displaysPageBreaks = false
}
}
self.view.backgroundColor = UIColor.black
}
В раскадровке я установил ограничение для UIview, чтобы заполнить всю ширину экрана - что он и делает.
Используя autoscale, продающий PDF-документ меньше ширины экрана, он в основном добавляет поля вокруг PDF-файла. Я могу увеличить масштаб и заставить PDF-файл заполнить весь экран, прежде чем он выйдет за край и не вступят в игру полосы прокрутки.
Если я устанавливаю коэффициент масштабирования вручную, я могу сделать так, чтобы одностраничный PDF-файл заполнял ширину экрана, но если PDF-файл содержит более одной страницы, тогда ширина становится меньше ширины экрана при наличии margin.
В конечном итоге я просто хочу заполнить PDF-файлом всю ширину экрана без каких-либо полей / пробелов.
Был бы признателен за помощь.
ОБНОВЛЕНИЕ: код используется в соответствии с рекомендациями ниже, но в настоящее время не работает:
if let path = Bundle.main.path(forResource: pdfObject, ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
pdfView = PDFView(frame: CGRect(x: 0, y: 0, width: pdfView.frame.width, height: pdfView.frame.height))
pdfView.document = pdfDocument
}
}
Примечание: pdfView - это мой UIView, который является PDFView





Просто используйте pdfview = PDFView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)) перед pdfView.document = pdfDocument
И удалите эти строки:
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
Спасибо за вклад, к сожалению, это не работает. У меня просто пустой экран (под заголовком). К вашему сведению, моя иерархия представлений в раскадровке: Просмотр - PDFView
пожалуйста, поделитесь иерархией раскадровки.
если вы используете UIView и внутри этого pdfview, вы можете изменить pdfview = PDFView (frame: CGRect (x: 0, y: 0, width: view.frame.width, height: view.frame.height)) на pdfview = PDFView (кадр: CGRect (x: 0, y: 0, ширина: yourView.frame.width, высота: yourView.frame.height))
Привет, Махеш, извиняюсь за задержку отдыха, я не смог добраться до своего компьютера. К сожалению, это не работает. Я действительно пробовал это, прежде чем размещать комментарий выше, но снова устал и никакого эффекта. Ive также попытался удалить ограничения из pdfView, но безрезультатно. Буду признателен за любую дополнительную помощь, я очень хочу дать вам награду!
@MaheshShahane Привет, не могли бы вы мне помочь?
@EktaPadaliya что тебе нужно? дайте мне знать.
Да, во-первых, большое спасибо Махешу. Хотя его ответ не дал прямого ответа на мой вопрос, они сказали две вещи, которые помогли решить эту проблему.
В целом, чтобы установить PDF-файл для заполнения представления, мне нужно было установить автоматическое изменение размера и автомасштабирование ДО
pdfView.document = pdfDocument
А чтобы затем управлять масштабированием, установите эти значения ПОСЛЕ
pdfView.document = pdfDocument
Таким образом, мой последний код:
func pdfDisplay() {
if let path = Bundle.main.path(forResource: pdfObject, ofType: "pdf") {
let url = URL(fileURLWithPath: path)
if let pdfDocument = PDFDocument(url: url) {
pdfView.autoresizesSubviews = true
pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleLeftMargin]
pdfView.displayDirection = .vertical
pdfView.autoScales = true
pdfView.displayMode = .singlePageContinuous
pdfView.displaysPageBreaks = true
pdfView.document = pdfDocument
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
}
}
}
Не буду лгать, я не уверен, почему это работает именно в таком порядке, я был бы признателен за комментарий более мудрого ума, чем мой, но я надеюсь, что это поможет другим
работает отлично.
Николас Фармер может проверить следующий пример для меня и сообщить решение для меня, здесь я хочу сделать то же самое. Ссылка -github.com/MallikarjunH/TestPDFFullScreen1.git
В моем коде / требовании требуется отображение одной страницы, т.е. pdfView.displayMode = .singlePage
Уважаемый MK, извините, у меня нет времени скачать и просмотреть. Опубликовать как отдельный вопрос со всем кодом
Николас Фармер - вот ссылка на новый вопрос - stackoverflow.com/questions/66219028/…
Я боролся с аналогичной проблемой и очень странным и непоследовательным поведением autoScales. В моем случае автоматическое масштабирование работало либо с первым загруженным документом, но не с любыми последующими загруженными документами в том же pdfView, либо оно работало только со вторым загруженным документом.
Я встроил pdfView в UIScrollView, чтобы получить больший контроль над поведением жеста.
Порядок команд действительно кажется ключевым. После долгих проб и ошибок этот порядок сработал для меня лучше всего:
Загрузите документ
pdfView.document = pdfDocument
Установите режим отображения
pdfView.displayMode = .singlePage
Установите любые ограничения, фон, тень и т. д.
Внесите изменения в размер pdfView, изменив ограничения
Установить autoScales
pdfView.autoScales = true
Установите масштабные коэффициенты
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
Это единственный порядок, в котором все работало в моем случае, и он работал только тогда, когда присутствовали все этапы 2, 5 и 6.
Привет, я хочу отобразить свой PDF-файл в режиме просмотра с фиксированным размером.
Привет, Экта, рассматривали ли вы возможность размещения PDFView в пользовательском UIScrollView? Это то, что я сделал, и у меня было гораздо больше контроля над этим.
Установите pdfView в viewDidLoad() и вставьте это в viewDidLayoutSubviews():
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
Сначала установите minScaleFactor, затем установите scaleFactor, который должен находиться между minScaleFactor и maxScaleFactor.
Запустите отладку и изменяйте эти значения, пока не получите идеальный размер.
func showPDF(_ dataStr:String){
guard let data = Data(base64Encoded: dataStr) else { return }
let pdfView = PDFView(frame: self.view.bounds)
pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
pdfView.autoScales = true
pdfView.displayMode = .singlePageContinuous
pdfView.displaysPageBreaks = true
pdfView.document = PDFDocument(data:data)
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = 1.15
pdfView.scaleFactor = 1.15
self.view.addSubview(pdfView)
}
В качестве дополнения я пробовал (безрезультатно): pdfView.autoresizesSubviews = true pdfView.autoresizingMask = [.f flexibleWidth, .f flexibleHeight, .f flexibleTopMargin, .f flexibleLeftMargin]