UIPopOverController Shortens When Alert Controller Is Presented

I have the following UIPopOverController on an iPad. This is an iOS 8 app with versatile demos. In Xcode, I selected this segment as "Present as Popover".

enter image description here

Whenever this view controller presents a UIAlertController, this happens:

enter image description here

The portport shrinks to a weird size. UIAlertController is presented from the list:

        var alert = UIAlertController(title: NSLocalizedString("Error", comment: "A simple error label"), message: NSLocalizedString("This account is already linked to the app.", comment: "A string describing the problem"), preferredStyle: .Alert)
        var action = UIAlertAction(title: NSLocalizedString("OK", comment: "Simple string"), style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) in
            self.usernameTextField.becomeFirstResponder()
            self.passwordTextField.text = ""
            return
        })
        alert.addAction(action)
        self.presentViewController(alert, animated: true, completion: nil)

I didn't play with the limitations of view controllers at all, so I have no idea why this is happening. What is the right way to prevent this?

+4
source share
4 answers

, iOS 8.0.2 . iOS 8.1. , popovers , .

+1

. nav.preferredContentSize =CGSizeMake(320, 480); , .

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:myController];
nav.preferredContentSize =CGSizeMake(320, 480);
popOver = [[UIPopoverController alloc] initWithContentViewController:nav];
[popOver presentPopoverFromRect:frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:NO];
0

, , iOS9.0. UINavigationController UIViewController, UIPopoverController. UIAlertController UIViewController popover , . :

- (void)viewWillLayoutSubviews
{
    CGSize preferredContentSize = self.preferredContentSize;
    CGSize fakeMomentarySize    = CGSizeMake(preferredContentSize.width + 1.0f, preferredContentSize.height + 1.0f);
    self.preferredContentSize   = fakeMomentarySize;
    self.preferredContentSize   = preferredContentSize;

    CGRect frame    = self.view.frame;
    frame.size      = [self preferredContentSize];
    self.view.frame = frame;

    [super viewWillLayoutSubviews];
}

UIViewController. - viewWillAppear viewDidAppear, , . viewWillLayoutSubviews. preferredContentSize question. , . UIViewController preferredContentSize .

, -.

0

, UIViewController modalPresentationStyle = UIModalPresentationStyle.CurrentContext UIAlertController. UIModalPresentationStyle.OverCurrentContext.

0
source

All Articles