高さの異なるページを含む PDF を、一度に 1 ページずつ、ページ間に隙間なく、各ページの上部をビューの上部に揃えて、水平方向にページ形式で表示したいと考えています。例えば:
PDFKit
特にこれらの設定は次のPDFView
方法で実現できるため、を使用したいと思います。
let pdfView = PDFView()
pdfView.displayDirection = .horizontal
pdfView.displaysPageBreaks = false
pdfView.usePageViewController(true, withViewOptions: nil)
ただし、これにより次の結果が生成されます。
これは、ページの高さが異なるためです。各ページは の垂直方向の中央に配置されPDFView
、ページの高さがビューの高さよりも大きい場合 (ページ 2 など)、収まるように縦横比が調整されます。
最初の問題である垂直オフセットを解決するために、いくつかのことを試みました。まず、これは大雑把で、ビュー階層を調べてPDFTextInputView
、ページがレンダリングされるプライベート ビュー ( という名前のクラスのビュー) を見つけた後、そのフレームorigin.y
を0
最も外側のスクロールビュー (別のプライベート ビュー) がスクロールします。これは、次または前のページがビューにスクロールされるたびに、ページがビューの上部にレンダリングされるという点で機能します。ただし、ユーザーがそのページをピンチしてズームすると、そのフレームは自動的に中央に戻ります。このアプローチは、プライベート ビュー階層に依存することを除けば、うまくいきません。
「背の高いページの問題」(ページ 2) を解決するために、新しいページが表示されるたびに PDFView の倍率を調整してみました。悲しいことに、.PDFViewPageChanged
通知はスクロール ビューの減速が終了した後にのみ発生するため、スクロール イン時にページがズーム アウトされ、スケール ファクターを調整すると、画面の幅に合わせてジャンプします。次に.PDFViewVisiblePagesChanged
、次/前のページが表示されると起動する に目を向けました (さらに数回、これで問題ありません)。これには と同じ問題があり.PDFViewPageChanged
ます。
私が試した他のこと:
transform
ドキュメント ビューの調整- ピンチ ジェスチャをインターセプトし、ドキュメント ビューの中心を調整する
- 独自のページコントローラーを作成し、ページごとに 1 つの PDF ページをレンダリングします (を使用しない
pdfView.usePageViewController
)
私が求めているものをどのように達成できるかについて、誰かアイデアはありますか?