UIPopOverController在呈现警报控制器时收缩

时间:2014-09-24 19:06:49

标签: storyboard ios8 uipopovercontroller uialertcontroller universal-storyboard

我在iPad上有以下UIPopOverController。这是一款带有通用故事板的iOS 8应用程序。在XCode中,我选择了它作为“作为弹出窗口存在”的segue。

enter image description here

每当这个视图控制器呈现UIAlertController时,就会发生这种情况:

enter image description here

popover缩小到一个奇怪的大小。 UIAlertController从弹出窗口显示为:

        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)

我根本没有使用视图控制器的约束,所以我不知道为什么会发生这种情况。什么是防止这种情况发生的正确方法?

4 个答案:

答案 0 :(得分:1)

看起来这是iOS 8.0.2及更低版本的错误。我的所有设备现在都更新到iOS 8.1。我没有改变我的代码,当我们的代码出现时,我的所有邮件都不会缩小。

答案 1 :(得分:0)

它为我工作。 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];

答案 2 :(得分: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中。由于某些原因,在解除警报视图后,没有调用viewWillAppearviewDidAppear方法,导航控制器委托也不会回复此移动,因此视图控制器不会参与计算它的大小。所以我把它放在viewWillLayoutSubviews中。设置preferredContentSize的魔力在此question中有所描述。我还需要恢复视图框架,因为它仍然缩小了。 UIViewController preferredContentSize应该在其他地方设置。

希望这有助于某人。

答案 3 :(得分:0)

当您使用UIViewController展示modalPresentationStyle = UIModalPresentationStyle.CurrentContext并显示UIAlertController的提醒时,会出现此问题。请改用UIModalPresentationStyle.OverCurrentContext