Search code examples
iosobjective-cuipopovercontrollermodalviewcontroller

UIPopoverController displayed as modalViewController in iOS 8


I just ran into a very frustrating problem. I don't know if it's an iOS8 bug or it's something else.

I'm loading the view from a nib, which looks like this:

popover view in interface builder

Here ist my code:

UIViewController *popoverViewController = [[UIViewController alloc] init];
[popoverViewController setView:poppverViewFromNib];

_popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverViewController];
[_popverController presentPopoverFromRect:CGRectMake(100, 100, 10, 10) inView:[self view] permittedArrowDirections:UIPopverArrowDirectionAny animated:YES];

The iOS simulator as well as the real device are displaying the viewController modally like you can see here:

presentation on the device

EDIT

As requested in comments, I tell you what I expect when using UIPopoverController: I expect an UIPopover, not a modalViewController.

So here my question to all of those how didn't get it: Why does my UIPopoverController does not display as a popover but as modalViewController? How can I fix it?


Solution

  • Read the documentation. Popover presentation is only available for horizontally regular size classes. Currently, this is only on iPad. Popover presentation on iPhone will always be executed as full screen modal presentation. See here.

    You are lucky that iOS8 doesn't crash, as iOS7 and below, if you used UIPopoverController on a phone idiom, your app would crash. UIPopoverController is deprecated in iOS8 in favor of popover modal presentation. This is why your app does not crash.