iOS PDFKit не заполняет UIView - PullRequest
0 голосов
/ 18 октября 2018

Я использую 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, чтобы заполнить всю ширину экрана.screen - что и делает.

При использовании autoscale объем продаж PDF-документа меньше ширины экрана, он в основном добавляет поле вокруг PDF.Я могу увеличить масштаб и заставить его PDF заполнить весь экран, прежде чем он переполнится и полосы прокрутки вступят в игру.

Если я установлю масштабный коэффициент вручную, я смогу сделать одну PDF-страницу заполненной по ширине экрана,но если PDF имеет более одной страницы, то ширина становится меньше ширины экрана при наличии margin.

В конечном счете, я просто хочу заполнить всю ширину экрана с помощью PDFбез каких-либо отступов / пробелов.

Screenshot

Буду признателен за некоторую помощь.

ОБНОВЛЕНИЕ: код, используемый в соответствии с рекомендациями ниже, но в настоящее время нетработает:

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

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Да, во-первых, большое спасибо Махешу.Хотя его ответ не дал прямого ответа на мой вопрос, две вещи, которые они сказали, предоставили путь для решения этой проблемы.

В целом, чтобы настроить 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

        }
    } 
}

Не собираюсь лгать, я не уверенпочему это работает в таком порядке, я был бы признателен за комментарий от более умного ума, чем я, но я надеюсь, что это поможет другим

0 голосов
/ 12 марта 2019

Я боролся с подобной проблемой и очень странным и непоследовательным поведением autoScales.В моем случае автоматическое масштабирование сработало либо для первого загруженного документа, но не для любых последующих загруженных документов в том же pdfView, или оно работало только для второго загруженного документа.

Я встроил pdfView вUIScrollView, чтобы получить больше контроля над поведением жестов.

Упорядочение команд, кажется, действительно является ключевым.После большого количества проб и ошибок этот порядок работал для меня лучше всего:

  1. Загрузить документ

    pdfView.document = pdfDocument

  2. Установка режима отображения

    pdfView.displayMode = .singlePage

  3. Установка любых ограничений, фона, тени и т. Д.

  4. Внесите изменения в размер pdfView, изменив ограничения

  5. Установить autoScales

    pdfView.autoScales = true

  6. Установить масштабные коэффициенты

    pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit

Это единственный порядок, в котором все работало в моем случае, и это работало, только когда присутствовали этапы 2, 5 и 6.

0 голосов
/ 26 октября 2018

Просто используйте 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
...