SwiftUI Split Screen: Display Two PDF Views Side by Side on iOS
Show two instances of PDFViewController
side by side using SwiftUI.
//// Copyright © 2019-2025 PSPDFKit GmbH. All rights reserved.//// The Nutrient sample applications are licensed with a modified BSD license.// Please see License for details. This notice may not be removed from this file.//
import PSPDFKitimport PSPDFKitUIimport SwiftUI
class SwiftUISplitScreenExample: Example {
override init() { super.init()
title = "SwiftUI Split-Screen Example" contentDescription = "Shows how to show two PDFViews in SwiftUI side by side." category = .swiftUI priority = 13 }
override func invoke(with delegate: ExampleRunnerDelegate) -> UIViewController? { let leadingDocument = AssetLoader.writableDocument(for: .welcome, overrideIfExists: false) let trailingDocument = AssetLoader.writableDocument(for: .annualReport, overrideIfExists: false) let swiftUIView = SwiftUISplitScreenExampleView(leadingDocument: leadingDocument, trailingDocument: trailingDocument) let hostingController = UIHostingController(rootView: swiftUIView, largeTitleDisplayMode: .never) hostingController.title = "SwiftUI SplitScreen Example"
return hostingController }}
private struct SwiftUISplitScreenExampleView: View { let leadingDocument: Document let trailingDocument: Document @PDFView.Scope private var leadingViewScope @PDFView.Scope private var trailingViewScope
var body: some View { HStack(spacing: 0) { // First view uses continuous vertical scrolling. NavigationView { PDFView(document: leadingDocument) .scrollDirection(.vertical) .pageTransition(.scrollContinuous) .pageMode(.single) .spreadFitting(.adaptive) .userInterfaceViewMode(.always) .toolbar { // Add the default toolbar items. DefaultToolbarButtons() } .pdfViewScope(leadingViewScope) .navigationTitle(LocalizedStringKey(leadingDocument.title!)) .navigationBarTitleDisplayMode(.inline) }.navigationViewStyle(StackNavigationViewStyle())
Divider()
// Second view uses horizontal per-page scrolling. NavigationView { PDFView(document: trailingDocument) .scrollDirection(.horizontal) .pageTransition(.scrollPerSpread) .pageMode(.single) .spreadFitting(.fill) .userInterfaceViewMode(.always) .toolbar { // Add the default toolbar items. DefaultToolbarButtons() } .pdfViewScope(trailingViewScope) .navigationTitle(LocalizedStringKey(trailingDocument.title!)) .navigationBarTitleDisplayMode(.inline) }.navigationViewStyle(StackNavigationViewStyle()) } }}
// MARK: Previews
struct SwiftUISplitScreenExamplePreviews: PreviewProvider { static var previews: some View { let leadingDocument = AssetLoader.document(for: .welcome) let trailingDocument = AssetLoader.document(for: .annualReport) SwiftUISplitScreenExampleView(leadingDocument: leadingDocument, trailingDocument: trailingDocument) }}
This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.