Изменение размера просмотра PDF при изменении ориентации устройства - PullRequest
0 голосов
/ 11 января 2019

В моем приложении есть ViewController, который позволяет пользователю открывать PDF. Приложение поддерживает альбомную и портретную ориентацию устройства. У меня проблема, когда пользователь меняет ориентацию устройства после открытия PDF. PDF имеет две страницы: Страница 1 - Все розовое и Страница 2 - Все фиолетовое

Я столкнулся с проблемой кадрирования после открытия PDF-файла и изменения ориентации устройства пользователем. Если PDF открывается в книжной ориентации, PDF заполняет только половину экрана, как только расположение устройства меняется на альбомную: Portrait Orientation after being opened in a portrait orientation Landscape Orientation after being opened in portrait orientation

Аналогично, если PDF открывается в альбомной ориентации, PDF будет отображаться только на половине экрана, если ориентация устройства является портретной: Lanscape Orientation after being opened in a landscape Orientation Portrait Orientation after being opened in a landscape Orientation

Вот мой код:

import UIKit
import PDFKit

class PDFfun: UIViewController {

    var pdfView = PDFView()

override func viewDidLoad() {
    super.viewDidLoad()

    pdfView = PDFView(frame: self.view.frame)

    if let documentURL = Bundle.main.url(forResource: "Blank", withExtension: "pdf"),
        let document = PDFDocument(url: documentURL),
        let _ = document.page(at: 0) {

        pdfView.document = document
        pdfView.autoScales = true
        pdfView.backgroundColor = UIColor.lightGray
        pdfView.autoScales = true

     }
    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        if UIDevice.current.orientation.isLandscape {
            print("landscape")
            pdfView = PDFView(frame: view.frame)
            pdfView.autoScales = true
        } else {
            print("portait")
            pdfView = PDFView(frame: view.frame)
            pdfView.autoScales = true
        }
    }
}

Я устал добавлять override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) исправить мою проблему, но я не вижу изменений.

1 Ответ

0 голосов
/ 11 января 2019

Лучший способ - добавить ограничения макета в pdfView. В вашем viewDidLoad например:

   pdfView.translatesAutoresizingMaskIntoConstraints = false
   view.addSubview(pdfView)     
   view.addConstraints([
        NSLayoutConstraint(item: pdfView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: pdfView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: pdfView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1, constant: 0),
        NSLayoutConstraint(item: pdfView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: 0)
        ])

Если вы не хотите использовать layoutConstraint, вы также можете установить рамку для вашего pdfView в методе viewDidLayoutSubviews:

    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

         pdfView.frame = view.frame
    }

И не забудьте удалить свой код внутри метода viewWillTransition.

...