4

iPadに次のUIPopOverControllerがあります。これは、ユニバーサル ストーリーボードを備えた iOS 8 アプリです。XCode では、このセグエを「Present as Popover」として選択しました。

ここに画像の説明を入力

このView Controllerが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

で を提示し、 でアラートを表示すると、UIViewController問題が発生します。代わりに使用してください。modalPresentationStyle = UIModalPresentationStyle.CurrentContextUIAlertControllerUIModalPresentationStyle.OverCurrentContext

于 2016-02-24T21:19:20.023 に答える
0

もう遅いかもしれませんが、iOS9.0でも同様の問題が発生しています。UINavigationControllerルートUIViewControllerが内部に配置されたコントローラーがありUIPopoverControllerます。UIAlertControllerポップオーバーから表示した後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 に答える