---
title: "Configure iOS PDF viewer scroll direction & page transition | Nutrient"
canonical_url: "https://www.nutrient.io/guides/ios/customizing-the-interface/document-presentation-options/"
md_url: "https://www.nutrient.io/guides/ios/customizing-the-interface/document-presentation-options.md"
last_updated: "2026-05-23T00:08:18.131Z"
description: "You can configure the page transition, scroll direction, and scroll mode of a PDFViewController in PDFConfiguration (see the PDF configuration guide."
---

# Configuring scroll directions and page transitions in our viewer

You can configure the page transition, scroll direction, and scroll mode of a `PDFViewController` in [`PDFConfiguration`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration) (see the [PDF configuration](https://www.nutrient.io/guides/ios/getting-started/view-controller-configuration.md) guide for more information).

In `SettingsExample` from the [Catalog app](https://www.nutrient.io/../../getting-started/example-projects/#nutrient-catalog), you’ll see a complete example of how these properties interact together in the context of a [`PDFSettingsViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfsettingsviewcontroller). A [`PDFSettingsViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfsettingsviewcontroller) is used to change key UX settings that are configurable via the [`PDFConfiguration.settingsOptions`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/settingsoptions) property.

## Recommended configurations

For the best user experience, we recommend using one of the following two combinations of settings.

### Book/magazine-style scrolling

```swift

let configuration = PDFConfiguration { builder in
    builder.scrollDirection =.horizontal
    builder.pageTransition =.scrollPerSpread
    builder.pageMode =.automatic
    builder.spreadFitting =.fit
}

```

This will show two pages at a time when there is sufficient space (typically on iPad in landscape), and one page at a time in all other situations.

### Continuous vertical scrolling

```swift

let configuration = PDFConfiguration { builder in
    builder.scrollDirection =.vertical
    builder.pageTransition =.scrollContinuous
    builder.pageMode =.single
    builder.spreadFitting =.adaptive
}

```

This will show pages fit to the window size in most cases or filling the width on iPhone in landscape.

## Valid combinations

You need to be aware of the following constraints when using the [`PDFConfiguration`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration) properties ([`pageTransition`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/pagetransition), [`scrollDirection`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/scrolldirection), and [`pageMode`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/pagemode)) simultaneously.

### Per-spread scrolling

If the page transition is [`PageTransition.scrollPerSpread`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagetransition/scrollperspread), there are no constraints:

- The [`scrollDirection`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/scrolldirection) property can be either [`ScrollDirection.horizontal`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/horizontal) or [`ScrollDirection.vertical`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/vertical).

- The [`pageMode`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/pagemode) property can be [`PageMode.single`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/single), [`PageMode.double`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/double), or [`PageMode.automatic`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/automatic).

### SWIFT

```swift

let configuration = PDFConfiguration { builder in
	// When the page transition is `scrollPerPage`.
	builder.pageTransition =.scrollPerSpread
	builder.scrollDirection =.vertical // Can also be `.horizontal`.
	builder.pageMode =.single // Can also be `.double` or `.automatic`.
}

```

### OBJECTIVE-C

```objc

PSPDFConfiguration *configuration = [PSPDFConfiguration configurationWithBuilder:^(PSPDFConfigurationBuilder *builder) {
	// When the page transition is `PSPDFPageTransitionScrollPerSpread`.
	builder.pageTransition = PSPDFPageTransitionScrollPerSpread;
	builder.scrollDirection = PSPDFScrollDirectionVertical; // Can also be `PSPDFScrollDirectionHorizontal`.
	builder.pageMode = PSPDFPageModeSingle; // Can also be `PSPDFPageModeDouble` or `PSPDFPageModeAutomatic`.
}];

```

### Continuous scrolling

If the page transition is [`PageTransition.scrollContinuous`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagetransition/scrollcontinuous):

- The [`scrollDirection`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/scrolldirection) property can be either [`ScrollDirection.horizontal`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/horizontal) or [`ScrollDirection.vertical`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/vertical).

- If [`ScrollDirection.vertical`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/vertical) is used, the [`pageMode`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/pagemode) property can be [`PageMode.single`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/single), [`PageMode.double`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/double), or [`PageMode.automatic`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/automatic). It’ll be forced to [`PageMode.single`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/single) if [`ScrollDirection.horizontal`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/horizontal) is used.

### SWIFT

```swift

let configuration = PDFConfiguration { builder in
	// When the page transition is `scrollContinuous`.
	builder.pageTransition =.scrollContinuous
	builder.scrollDirection =.vertical // Can also be `.horizontal`.
	builder.pageMode =.single // Setting a value to `pageMode` will only be honored if `scrollDirection` is `.vertical`. It will be forced to single otherwise.
}

```

### OBJECTIVE-C

```objc

PSPDFConfiguration *configuration = [PSPDFConfiguration configurationWithBuilder:^(PSPDFConfigurationBuilder *builder) {
	// When the page transition is `PSPDFPageTransitionScrollContinuous`.
	builder.pageTransition = PSPDFPageTransitionScrollContinuous;
	builder.scrollDirection = PSPDFScrollDirectionVertical; // Can also be `PSPDFScrollDirectionHorizontal`.
	builder.pageMode = PSPDFPageModeSingle; // Setting a value to `pageMode` will only be honored if `scrollDirection` is `PSPDFScrollDirectionVertical`. It will be forced to `PSPDFPageModeSingle` otherwise.
}];

```

### Page curl

If the page transition is [`PageTransition.curl`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagetransition/curl):

- The value of [`scrollDirection`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/scrolldirection) will be forced to [`ScrollDirection.horizontal`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/scrolldirection/horizontal).

- The [`pageMode`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration/pagemode) property can be [`PageMode.single`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/single), [`PageMode.double`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/double), or [`PageMode.automatic`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pagemode/automatic).

### SWIFT

```swift

let configuration = PDFConfiguration { builder in
	// When the page transition is `curl`.
	builder.pageTransition =.curl
	builder.scrollDirection =.horizontal // Setting a value to the `scrollDirection` property will be ignored. It will be forced to `.horizontal`.
	builder.pageMode =.single // Can also be `.double` or `.automatic`.
}

```

### OBJECTIVE-C

```objc

PSPDFConfiguration *configuration = [PSPDFConfiguration configurationWithBuilder:^(PSPDFConfigurationBuilder *builder) {
	// When the page transition is `PSPDFPageTransitionCurl`.
	builder.pageTransition = PSPDFPageTransitionCurl;
	builder.scrollDirection = PSPDFScrollDirectionHorizontal; // Setting a value to the `scrollDirection` property will be ignored. It will be forced to `PSPDFScrollDirectionHorizontal`.
        builder.pageMode = PSPDFPageModeSingle; // Can also be `PSPDFPageModeDouble` or `PSPDFPageModeAutomatic`.
}];

```

## Persisting the settings options with user defaults

You can persist the settings options for your [`PDFSettingsViewController`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfsettingsviewcontroller) in your app’s [`UserDefaults`](https://developer.apple.com/documentation/foundation/userdefaults).

### Saving the settings options

You can save the settings in your app’s user defaults in [`PDFViewControllerDelegate.pdfViewControllerDidDismiss(_:)`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfviewcontrollerdelegate/pdfviewcontrollerdiddismiss(_:)), like so:

### SWIFT

```swift

func pdfViewControllerDidDismiss(_ pdfController: PDFViewController) {
	// Persist the settings options in the user defaults.
	let defaults = UserDefaults.standard
	defaults.set(pdfController.configuration.pageTransition.rawValue, forKey: "pageTransition")
	defaults.set(pdfController.configuration.pageMode.rawValue, forKey: "pageMode")
	defaults.set(pdfController.configuration.scrollDirection.rawValue, forKey: "scrollDirection")
	defaults.set(pdfController.configuration.spreadFitting.rawValue, forKey: "spreadFitting")
}

```

### OBJECTIVE-C

```objc

- (void)pdfViewControllerDidDismiss:(PSPDFViewController *)pdfController {
	// Persist the settings options in the user defaults.
	NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults;
	[defaults setInteger:pdfController.configuration.pageTransition forKey: @"pageTransition"];
	[defaults setInteger:pdfController.configuration.pageMode forKey: @"pageMode"];
	[defaults setInteger:pdfController.configuration.scrollDirection forKey: @"scrollDirection"];
	[defaults setInteger:pdfController.configuration.spreadFitting forKey: @"spreadFitting"];
}

```

### Restoring the settings options

You can restore the saved settings options from your app’s user defaults in your [`PDFConfiguration`](https://www.nutrient.io/api/ios/documentation/pspdfkitui/pdfconfiguration), as seen below:

### SWIFT

```swift

let configuration = PDFConfiguration { builder in
	// Restore the settings from the user defaults.
	let defaults = UserDefaults.standard
	builder.pageTransition = PageTransition(rawValue: UInt(defaults.integer(forKey: "pageTransition")))!
	builder.pageMode = PageMode(rawValue: UInt(defaults.integer(forKey: "pageMode")))!
	builder.scrollDirection = ScrollDirection(rawValue: UInt(defaults.integer(forKey: "scrollDirection")))!
	builder.spreadFitting = PDFConfiguration.SpreadFitting(rawValue: defaults.integer(forKey: "spreadFitting"))!
}

```

### OBJECTIVE-C

```objc

PSPDFConfiguration *configuration = [PSPDFConfiguration configurationWithBuilder:^(PSPDFConfigurationBuilder *builder) {
	// Restore the settings from the user defaults.
	NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults;
	builder.pageTransition = [defaults integerForKey:@"pageTransition"];
	builder.pageMode = [defaults integerForKey:@"pageMode"];
	builder.scrollDirection = [defaults integerForKey:@"scrollDirection"];
	builder.spreadFitting = [defaults integerForKey:@"spreadFitting"];
}];

```

For more details and sample code, take a look at [`PersistViewSettingsExample.swift`](https://github.com/PSPDFKit/pspdfkit-ios-catalog/blob/master/Catalog/Examples/ControllerCustomization/PersistViewSettingsExample.swift) from the [Catalog app](https://www.nutrient.io/../../getting-started/example-projects/#nutrient-catalog).
---

## Related pages

- [iOS PDF viewer library](/guides/ios/viewer.md)
- [Customizing page navigation in our iOS viewer](/guides/ios/getting-started/document-interactions.md)
- [Embedded files and PDF portfolio collections](/guides/ios/features/embedded-files.md)
- [Enhance your PDF workflow with JavaScript support](/guides/ios/features/javascript.md)
- [iOS image viewer library](/guides/ios/viewer/images.md)
- [Configure permissions for iOS PDF viewer](/guides/ios/features/document-permissions.md)
- [Swift PDF viewer library](/guides/ios/viewer/swift.md)
- [Troubleshooting](/guides/ios/viewer/troubleshooting.md)
- [Display PDFs with the view state on iOS](/guides/ios/view-management/store-load-view-state.md)
- [visionOS AR/VR PDF viewer](/guides/ios/viewer/visionos.md)

