1. ホーム
  2. objective-c

iOS 8 iPhoneでのUIPopoverPresentationControllerの利用について

2023-10-17 21:12:51

質問

誰か UIPopoverPresentationController は iPhone でポップオーバーを表示するために使用できるのかどうか知っていますか?Apple が iOS 8 でこの機能を追加したのは、iPad と iPhone でより統一されたプレゼンテーション コントローラーを作成するためなのでしょうか。

ベータ版からの質問/回答がOKかどうかはわかりません。その場合は削除します。

どのように解決するのですか?

デフォルトの適応的な振る舞いを上書きすることができます ( UIModalPresentationFullScreen を使うことで、デフォルトの適応的な動作 (iPhone などのコンパクトな横長環境では adaptivePresentationStyleForPresentationController: メソッドを使って UIPopoverPresentationController.delegate .

UIPresentationController はこのメソッドを使って新しいプレゼンテーションのスタイルを問い合わせます。この場合、単に UIModalPresentationNone を返すだけで UIPopoverPresentationController はフルスクリーンではなくポップオーバーとしてレンダリングされます。

以下は、ストーリーボードでセグエの設定を使用して、ポップオーバーの例です。 UIBarButtonItem から"へ。 モーダルに表示 " a UIViewController

class SomeViewController: UIViewController, UIPopoverPresentationControllerDelegate {

    // override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { // swift < 3.0
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "PopoverSegue" {
            if let controller = segue.destinationViewController as? UIViewController {
                controller.popoverPresentationController.delegate = self
                controller.preferredContentSize = CGSize(width: 320, height: 186)                
            }
        }
    }

    // MARK: UIPopoverPresentationControllerDelegate

    //func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle { // swift < 3.0
    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
        // Return no adaptive presentation style, use default presentation behaviour
        return .None
    }
}

このトリックは WWDC 2014 セッション214 "iOS8におけるビューコントローラーの進化" (36:30)