Important: UIPopoverController is deprecated in iOS 9. In iOS 9 and later, a popover is implemented as a UIViewController presentation. To create a popover, use an instance of UIPopoverPresentationController and specify the popover style.


The UIPopoverController class is used to manage the presentation of content in a popover. You use popovers to present information temporarily. The popover content is layered on top of your existing content and the background is dimmed automatically. The popover remains visible until the user taps outside of the popover window or you explicitly dismiss it. Popover controllers are for use exclusively on iPad devices. Attempting to create one on other devices results in an exception.

To display a popover, create an instance of this class and present it using one of the appropriate methods. When initializing an instance of this class, you must specify the view controller that provides the content for the popover. Popovers normally derive their size from the view controller they present. However, you can change the size of the popover by modifying the value in the contentSize property or by calling the setContentSize(_:animated:) method. The latter approach is particularly effective if you need to animate changes to the popover’s size. The size you specify is just the preferred size for the popover’s view. The actual size may be altered to ensure that the popover fits on the screen and does not collide with the keyboard.

When displayed, taps outside of the popover window cause the popover to be dismissed automatically. To allow the user to interact with the specified views and not dismiss the popover, you can assign one or more views to the passthroughViews property. Taps inside the popover window do not automatically cause the popover to be dismissed. Your view and view controller code must handle actions and events inside the popover explicitly and call the dismiss(animated:) method as needed.

If the user rotates the device while a popover is visible, the popover controller hides the popover and then shows it again at the end of the rotation. The popover controller attempts to position the popover appropriately for you but you can also implement the popoverController(_:willRepositionPopoverTo:in:) method in the popover delegate to specify a new position.

You can assign a delegate to the popover to manage interactions with the popover and receive notifications about its dismissal. For information about the methods of the delegate object, see UIPopoverControllerDelegate.


Initializing the Popover

init(contentViewController: UIViewController)

Returns an initialized popover controller object.

Presenting and Dismissing the Popover

func present(from: CGRect, in: UIView, permittedArrowDirections: UIPopoverArrowDirection, animated: Bool)

Displays the popover and anchors it to the specified location in the view.

func present(from: UIBarButtonItem, permittedArrowDirections: UIPopoverArrowDirection, animated: Bool)

Displays the popover and anchors it to the specified bar button item.

func dismiss(animated: Bool)

Dismisses the popover programmatically.

Configuring the Popover Content

var contentViewController: UIViewController

The view controller responsible for the content portion of the popover.

func setContentView(UIViewController, animated: Bool)

Sets the view controller responsible for the content portion of the popover.

var contentSize: CGSize

The size of the popover’s content view.

func setContentSize(CGSize, animated: Bool)

Changes the size of the popover’s content view.

var passthroughViews: [UIView]?

An array of views that the user can interact with while the popover is visible.

Getting the Popover Attributes

var isPopoverVisible: Bool

A Boolean value indicating whether the popover is currently visible.

var arrowDirection: UIPopoverArrowDirection

The direction of the popover’s arrow.

Accessing the Delegate

var delegate: UIPopoverControllerDelegate?

The delegate you want to receive popover controller messages.

Customizing the Popover Appearance

var layoutMargins: UIEdgeInsets

The margins that define the portion of the screen in which it is permissible to display the popover.

var backgroundViewClass: AnyClass?

The class to use for displaying the popover background content.

var backgroundColor: UIColor?

The color of the popover’s backdrop view.



Constants for specifying the direction of the popover arrow.


Inherits From