web-dev-qa-db-ja.com

iOSPDFKitがUIViewを埋めていません

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 sales PDFドキュメントを画面の幅よりも小さくすると、基本的にpdfの周囲にマージンが追加されます。ズームインしてPDFを画面全体に表示させることができます。オーバーフローしてスクロールバーが機能する前に。

倍率を手動で設定すると、1ページを作成できます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は、PDFViewである私のUIViewです。

6
Nicholas Farmer

そうです、まずマヘシュに感謝します。彼の答えは私の質問に直接答えませんでしたが、彼らが言った2つのことはこれを解決するための道を提供しました。

全体的に、ビュー全体に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

        }
    } 
}

うそをつくつもりはありません、なぜこれがこの順序で機能するのかわかりません、私よりも賢い心からのコメントをいただければ幸いですが、これが他の人に役立つことを願っています

2
Nicholas Farmer

_pdfView.document = pdfDocument_の前にpdfview = PDFView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))を使用するだけです

そして、これらの行を削除します:

_pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
_
2
Mahesh Shahane

私は同様の問題と、autoScalesの非常に奇妙で一貫性のない動作に苦しんでいます。私の場合、自動スケーリングは最初にロードされたドキュメントで機能しましたが、同じpdfView内の後続のロードされたドキュメントでは機能しなかったか、2番目にロードされたドキュメントからのみ機能しました。

ジェスチャの動作をより細かく制御するために、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がすべて存在する場合にのみ機能しました。

2
Ron Regev

viewDidLoad()pdfViewを設定し、これをviewDidLayoutSubviews()に配置します。

pdfView.maxScaleFactor = 4.0 
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
1
MJQZ1347

最初にminScaleFactorを設定し、次にscaleFactorを設定します。これはminScaleFactormaxScaleFactorの間にある必要があります。

デバッグを実行し、最適なサイズになるまでこの値を変更します。

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)
}
0
Giovax68