4

我在 iPad 上有以下 UIPopOverController。这是一个带有通用故事板的 iOS 8 应用程序。在 XCode 中,我选择了它的 segue 作为“Present as Popover”。

在此处输入图像描述

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

在此处输入图像描述

弹出框缩小到一个奇怪的大小。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

4 回答 4

1

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

于 2014-10-25T21:54:30.127 回答
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];
于 2014-10-16T13:20:27.253 回答
0

也许现在为时已晚,但我在 iOS9.0 上发生了同样的问题。我有一个UINavigationControllerUIViewController放在里面的控制器UIPopoverControllerUIAlertController从弹出窗口呈现后UIViewController缩小以提醒视图大小。经过一番研究,我提出了这个解决方案:

- (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描述了设置的魔力。我还需要恢复视图框架,因为它仍然缩小了。应该更早地在别处设置。UIViewController preferredContentSize

希望这可以帮助某人。

于 2015-09-25T09:34:43.247 回答
0

当您显示UIViewControllerwithmodalPresentationStyle = UIModalPresentationStyle.CurrentContext并使用 显示警报时,就会出现问题UIAlertController。改为使用UIModalPresentationStyle.OverCurrentContext

于 2016-02-24T21:19:20.023 回答