# Settings

To configure settings for your paywall, click the **Settings** button from the **sidebar**:

<img src="__img0" />

Use this menu for paywall-wide presentation and behavior settings. The fields shown can vary by platform and account features, but each setting starts with a default value.

Presentation Style [#presentation-style]

Toggle the presentation style of your paywall. Available options are:

1. **Fullscreen:** The paywall will cover the entire device screen.
2. **Push:** The paywall will push onto a hierarchy, such as a `UINavigationController` on iOS.
3. **Modal:** The paywall presents with the platform's default modal API.
4. **No Animation:** The paywall presents modally, but without any animation.
5. **Drawer:** The paywall presents from a bottom drawer with customizable height and corner radius.
6. **Popup:** The paywall presents as a modal popup with customizable width, height, and corner radius from the center of the screen.

Presentation Style Examples [#presentation-style-examples]

These examples use the same paywall so the presentation differences are easier to compare.

**Fullscreen** fills the device screen.

<img alt="Fullscreen presentation style example" src="__img1" />

**Push** presents the paywall through the app's navigation stack.

<img alt="Push presentation style example" src="__img2" />

**Modal** uses the platform's default modal presentation.

<img alt="Modal presentation style example" src="__img3" />

**No Animation** presents modally without the transition animation.

<img alt="No Animation presentation style example" src="__img4" />

**Drawer** presents from the bottom of the screen.

<img alt="Drawer presentation style example" src="__img5" />

**Popup** presents in the center of the screen with configurable sizing.

<img alt="Popup presentation style example" src="__img6" />

Drawer Configuration [#drawer-configuration]

When using the **Drawer** presentation style, you can configure:

* **Height:** Set the height of the drawer as a percentage of the screen (default: 70%).
* **Corner Radius:** Set the corner radius for the drawer corners (default: 15px).
* **Scrolling:** Enable or disable scrolling within the drawer.

Popup Configuration [#popup-configuration]

When using the **Popup** presentation style, you can configure:

* **Width:** Set the width of the popup as a percentage of the screen (default: 80%).
* **Height:** Set the height of the popup as a percentage of the screen (default: 60%).
* **Corner Radius:** Set the corner radius for the popup corners (default: 15px).

> **Note**

Popup style requires iOS SDK v4.8.0+



Scrolling [#scrolling]

Toggle the scrolling behavior of your paywall. Available options are:

1. **Enabled (Default):** The paywall can scroll its contents when presented on a device.
2. **Disabled:** Disables all scrolling behavior on the paywall.

> **Note**

Requires iOS SDK v3.11.2+ and Android SDK v1.4.0+



Game Controller Support [#game-controller-support]

Toggle game controller support for paywalls — obviously, ideal for paywalls shown in games where controllers may be in use. Available options are:

1. **Enabled:** The paywall can scroll its contents when presented on a device.
2. **Disabled (Default):** Disables all scrolling behavior on the paywall.

Learn more about game controller support [here](/docs/sdk/guides/advanced/game-controller-support#game-controller-support).

Feature Gating [#feature-gating]

Feature gating allows you to control whether or not [placements](/docs/dashboard/dashboard-campaigns/campaigns-placements) should restrict access to features. Using either method, the paywall will still be presented if a user isn't subscribed:

1. **Non Gated:** Placements *will always* fire your feature block. Specifically, once the paywall is dismissed.
2. **Gated:** Placements *will only* fire your feature block if the user is subscribed. Note that if they are subscribed, the paywall will *not* be presented.

For example:

```swift
// With non gated - `logCaffeine()` is still invoked
Superwall.shared.register(placement: "caffeineLogged") {
  logCaffeine()
}

// With gated - `logCaffeine()` is invoked only if the user is subscribed
Superwall.shared.register(placement: "caffeineLogged") {
  logCaffeine()
}
```

This is useful to dynamically change what is paywalled in production without an app update. For example, in a caffeine tracking app — perhaps you might run a weekend campaign where logging caffeine is free. You'd simply change the paywall to be **Non Gated**. Then, the paywall would still be presented, but users would be able to continue and log caffeine.

For information on how this behaves when offline, view this [section](/docs/sdk/quickstart/feature-gating#handling-network-issues).

> **Note**

Feature gating does not apply if you are manually presenting a paywall via `getPaywall`.



Cache on Device [#cache-on-device]

If enabled, Superwall's SDK will cache the paywall on device. This can be useful if you have a paywall that could take a few seconds to fetch and present (i.e. if there is a video as part of your design). On-device caching can lead to quicker presentation.

> **Note**

Device caching is currently only available on iOS.



Identifier [#identifier]

The identifier for the paywall. Non-editable.

Present Paywall [#present-paywall]

> **Warning**

This is now deprecated in iOS SDK version 4 and above, and version 2 and above for all other SDKs. Instead, use the [entitlements](/docs/dashboard/dashboard-campaigns/campaigns-audience#matching-to-entitlements) feature when creating campaign filters.



You can have a paywall present under two different conditions when a [placement](/docs/dashboard/dashboard-campaigns/campaigns-placements) is matched:

1. **Check User Subscription:** Present the paywall only if the user's subscription is not active.
2. **Always:** Present the paywall regardless of the user's subscription status.

Reroute back button [#reroute-back-button]

If enabled, allows you to run custom logic on back button press and consuming the event.
To use it, once the option has been enabled, use the `PaywallOptions.onBackPressed` and return true to consume the back press event or false to let the SDK handle it.

> **Note**

Back button rerouting is currently only supported on Android SDK 2.5.6 or higher