<!--
{
  "availability" : [
    "iOS: -",
    "iPadOS: -",
    "macCatalyst: -",
    "tvOS: -",
    "visionOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "UIKit",
  "identifier" : "/documentation/UIKit/UISplitViewControllerDelegate",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "UIKit"
    ],
    "preciseIdentifier" : "c:objc(pl)UISplitViewControllerDelegate"
  },
  "title" : "UISplitViewControllerDelegate"
}
-->

# UISplitViewControllerDelegate

The methods adopted by the object you use to manage changes to a split view interface.

```
@MainActor protocol UISplitViewControllerDelegate
```

## Overview

Use the methods of this protocol to respond to changes in the current display mode and to the current interface orientation. When the split view interface collapses and expands, or when a new view controller is added to the interface, you can also use these methods to configure the child view controllers.

The methods of this protocol are all optional. If you don’t implement any of the methods, the split view controller provides default behavior to handle the collapsing and expanding transitions.

For more information, see [`UISplitViewController`](/documentation/UIKit/UISplitViewController).

### Column-style split views

In a column-style split view interface, you use these delegate methods to customize interface transition behavior:

- [`splitViewController(_:topColumnForCollapsingToProposedTopColumn:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:topColumnForCollapsingToProposedTopColumn:))
- [`splitViewController(_:willHide:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willHide:))
- [`splitViewController(_:didHide:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:didHide:))
- [`splitViewControllerDidCollapse(_:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerDidCollapse(_:))
- [`splitViewController(_:displayModeForExpandingToProposedDisplayMode:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:displayModeForExpandingToProposedDisplayMode:))
- [`splitViewController(_:willShow:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willShow:))
- [`splitViewController(_:didShow:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:didShow:))
- [`splitViewControllerDidExpand(_:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerDidExpand(_:))

### Classic split views

In a classic split view interface, you use these delegate methods to customize interface transition behavior:

- [`primaryViewController(forCollapsing:)`](/documentation/UIKit/UISplitViewControllerDelegate/primaryViewController(forCollapsing:))
- [`splitViewController(_:collapseSecondary:onto:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:collapseSecondary:onto:))
- [`primaryViewController(forExpanding:)`](/documentation/UIKit/UISplitViewControllerDelegate/primaryViewController(forExpanding:))
- [`splitViewController(_:separateSecondaryFrom:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:separateSecondaryFrom:))
- [`splitViewController(_:show:sender:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:show:sender:))
- [`splitViewController(_:showDetail:sender:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:showDetail:sender:))

At the end of a collapse transition, the split view controller typically shows only the content from its primary view controller. You can change this behavior by implementing the [`primaryViewController(forCollapsing:)`](/documentation/UIKit/UISplitViewControllerDelegate/primaryViewController(forCollapsing:)) method in your split view controller delegate. You might use that method to specify the secondary view controller or an entirely different view controller—perhaps one better suited for display in a horizontally compact environment.

If you want to perform any additional adjustments of the view controllers and view hierarchy, you can also implement the [`splitViewController(_:collapseSecondary:onto:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:collapseSecondary:onto:)) method in your delegate.

The expansion process reverses the collapsing process by asking the delegate to designate which view controller becomes the primary view controller and to give the delegate a chance to perform the transition itself. If you implement the delegate methods for collapsing your split view interface, you should also implement the [`primaryViewController(forExpanding:)`](/documentation/UIKit/UISplitViewControllerDelegate/primaryViewController(forExpanding:)) and [`splitViewController(_:separateSecondaryFrom:)`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:separateSecondaryFrom:)) methods for expanding that interface.

## Topics

### Specifying the interface orientations

[`-  splitViewControllerPreferredInterfaceOrientationForPresentation:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerPreferredInterfaceOrientationForPresentation(_:))

Asks the delegate for the orientation to use when presenting the split view controller.

[`-  splitViewControllerSupportedInterfaceOrientations:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerSupportedInterfaceOrientations(_:))

Asks the delegate to specify the interface orientations that the split view controller supports.

### Responding to display mode changes

[`-  splitViewController:willChangeToDisplayMode:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willChangeTo:))

Tells the delegate that the display mode for the split view controller is about to change.

[`-  targetDisplayModeForActionInSplitViewController:`](/documentation/UIKit/UISplitViewControllerDelegate/targetDisplayModeForAction(in:))

Asks the delegate to provide the display mode to apply when a split view controller action occurs.

### Collapsing the interface

[`-  splitViewController:topColumnForCollapsingToProposedTopColumn:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:topColumnForCollapsingToProposedTopColumn:))

Asks the delegate to provide the column to display after the split view interface collapses.

[`-  splitViewController:willHideColumn:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willHide:))

Tells the delegate that the specified column is about to be hidden.

[`-  splitViewController:didHideColumn:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:didHide:))

Tells the delegate that the system completed hiding the specified column.

[`-  splitViewControllerDidCollapse:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerDidCollapse(_:))

Tells the delegate that the split view controller interface has collapsed.

### Expanding the interface

[`-  splitViewController:displayModeForExpandingToProposedDisplayMode:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:displayModeForExpandingToProposedDisplayMode:))

Asks the delegate to provide the display mode to use after the split view interface expands.

[`-  splitViewController:willShowColumn:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willShow:))

Tells the delegate that the specified column is about to be shown.

[`-  splitViewController:didShowColumn:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:didShow:))

Tells the delegate that the system completed showing the specified column.

[`-  splitViewControllerDidExpand:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerDidExpand(_:))

Tells the delegate that the split view controller interface has expanded.

### Handling the presentation gesture

[`-  splitViewControllerInteractivePresentationGestureWillBegin:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerInteractivePresentationGestureWillBegin(_:))

Tells the delegate that the interactive presentation gesture is about to begin.

[`-  splitViewControllerInteractivePresentationGestureDidEnd:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewControllerInteractivePresentationGestureDidEnd(_:))

Tells the delegate when the interactive presentation gesture ends.

### Collapsing and expanding classic split views

[`-  primaryViewControllerForCollapsingSplitViewController:`](/documentation/UIKit/UISplitViewControllerDelegate/primaryViewController(forCollapsing:))

Asks the delegate to provide the single view controller to display after the split view interface collapses.

[`-  splitViewController:collapseSecondaryViewController:ontoPrimaryViewController:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:collapseSecondary:onto:))

Asks the delegate to adjust the primary view controller and to incorporate the secondary view controller into the collapsed interface.

[`-  primaryViewControllerForExpandingSplitViewController:`](/documentation/UIKit/UISplitViewControllerDelegate/primaryViewController(forExpanding:))

Asks the delegate to provide the view controller to display in the primary position when the split view interface expands.

[`-  splitViewController:separateSecondaryViewControllerFromPrimaryViewController:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:separateSecondaryFrom:))

Asks the delegate to provide the new secondary view controller for the split view interface.

### Overriding the presentation behavior

[`-  splitViewController:showViewController:sender:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:show:sender:))

Asks the delegate if it will do the work of displaying a view controller in the primary position of the split view interface.

[`-  splitViewController:showDetailViewController:sender:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:showDetail:sender:))

Asks the delegate if it will do the work of displaying a view controller in the secondary position of the split view interface.

### Deprecated methods

[`-  splitViewController:shouldHideViewController:inOrientation:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:shouldHide:in:))

Asks the delegate whether the first view controller should be hidden for the specified orientation.

[`-  splitViewController:willHideViewController:withBarButtonItem:forPopoverController:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willHide:with:for:))

Tells the delegate that the specified view controller is about to be hidden.

[`-  splitViewController:willShowViewController:invalidatingBarButtonItem:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:willShow:invalidating:))

Tells the delegate that the specified view controller is about to be shown again.

[`-  splitViewController:popoverController:willPresentViewController:`](/documentation/UIKit/UISplitViewControllerDelegate/splitViewController(_:popoverController:willPresent:))

Tells the delegate that the hidden view controller is about to be displayed in a popover.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)