質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Q&A

解決済

1回答

1997閲覧

UIPopoverPresentationControlleで表示されるポップアップが正しく表示されない

tigusann

総合スコア16

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

0グッド

0クリップ

投稿2018/12/04 07:24

UIPopoverPresentationControlleで表示されるポップアップが正しく表示されない

画面サイズの高さが414を超える端末でポップアップ表示が画面外まで表示されてしまう。
*端末参考サイズURL:https://qiita.com/TD3P/items/b3b754bde584abc98f44

該当のソースコード

objectivec

1 UIPopoverPresentationController *popoverPresentationController = navigationController.popoverPresentationController; 2 popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionAny; 3 popoverPresentationController.sourceRect = self.popBtn.frame; 4 popoverPresentationController.sourceView = self.view; 5 popoverPresentationController.delegate = self;

試したこと

preferredContentSizeを使用してポップアップのサイズを変更
横幅は、変更が聞いているが縦幅は画面外まで表示されてしまう。
画面サイズが414以外の端末では、正常に効いている。

objectivec

1 navigationController.preferredContentSize = CGSize(width: 150, height: 100)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2018/12/04 08:44 編集

確認した端末のiOSのバージョンに違いはありませんか?具体的にうまく表示されない端末とiOSのバージョンを提示してください。
tigusann

2018/12/04 09:22

iPhoneXsMax ver:12.0 iPhone7+ ver:11.3.1で確認できました。
guest

回答1

0

ベストアンサー

手元でiPhone XS Max(iOS12.1)のシミュレーターでポップオーバーを表示してみましたが、特にはみ出すようなことはありませんでした。

検証コードはSwiftです。

swift

1import UIKit 2 3class ViewController: UIViewController, UIPopoverPresentationControllerDelegate { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 let btn = UIButton(type: .system) 9 btn.frame = CGRect(x: 20, y: 40, width: 100, height: 44) 10 view.addSubview(btn) 11 btn.layer.borderColor = UIColor.black.cgColor 12 btn.layer.borderWidth = 1 13 btn.setTitle("test", for: .normal) 14 btn.addTarget(self, action: #selector(test), for: .touchUpInside) 15 } 16 17 @objc private func test(_ sender: UIButton) { 18 let vc = PopupViewController() 19 20 let navi = UINavigationController(rootViewController: vc) 21 navi.modalPresentationStyle = .popover 22 navi.preferredContentSize = CGSize(width: 150, height: 100) 23 24 if let presentationController = navi.popoverPresentationController { 25 presentationController.permittedArrowDirections = .any 26 presentationController.sourceRect = sender.bounds 27 presentationController.sourceView = sender 28 presentationController.delegate = self 29 } 30 31 present(navi, animated: true, completion: nil) 32 } 33 34 func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 35 return .none 36 } 37} 38 39class PopupViewController: UIViewController { 40 override func loadView() { 41 super.loadView() 42 view.backgroundColor = .red 43 title = "popover" 44 } 45}

実行結果:
イメージ説明

画面サイズの高さが414を超える端末で

これって画面サイズの高さではなく幅の事を言っているんだと思いますが、
画面を横向きで実行しているんでしょうかね?


追記:
上記コードでは画面横のときにポップオーバーではなくモーダルで出てしまうようです。

UIAdaptivePresentationControllerDelegateプロトコルの以下を実装すると、横向きでもちゃんと出るようです。

swift:

1 func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { 2 return .none 3 }

実行結果:
イメージ説明

投稿2018/12/05 01:19

編集2018/12/05 01:29
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tigusann

2018/12/06 09:03 編集

回答ありがとうございます。 画面は横向きで実行しています。
takabosoft

2018/12/06 08:06

その予想があるのでしたらソースコードで提示したような(PopupViewControllerクラスのような)適当なビューコントローラを使ってはめ込んでみてはいかがでしょう。自分の手元では、回答に追記しましたが、UIAdaptivePresentationControllerDelegateプロトコルで別の関数を実装してあげたところ画面横向きでも正しく表示されました。
tigusann

2018/12/20 05:37

原因不明なためポップオーバーからモーダルのフルスクリーンで対応しました。 検討いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問