2016-09-24 21 views
0

私はpopOverControllerのiPhoneとiPadを以下のコードで表示しています。iOS:AutolayoutとpopOverControllerの問題(可能性のあるXcodeのバグ)

ViewController *vc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil]; 

if ([UIDevice currentDevice].userInterfaceIdiom == 
    UIUserInterfaceIdiomPad) { 
    vc.preferredContentSize = CGSizeMake(296, 476); //your custom size. 
} else { 
    vc.preferredContentSize = CGSizeMake(252, 436.5); 
} 

vc.modalPresentationStyle = UIModalPresentationPopover; 
vc.popoverPresentationController.delegate = self; 
vc.popoverPresentationController.sourceView = self.view; 
vc.popoverPresentationController.sourceRect = CGRectMake(screenWidth/2, self.view.height/2, 1, 1); 

[self presentViewController:vc animated:YES completion:nil]; 

UIPopoverPresentationController *popOverController = vc.popoverPresentationController; 
popOverController.permittedArrowDirections = 0; 

しかし、クラスサイズの問題が発生しているようです。 iPadのデバイスを使用していても、iPhoneのサイズは使用されていて、iPadのサイズはまったく使用されていないようです。インターフェイスビルダでは、選択されているデバイスに応じてボタンに2つの異なるサイズが表示されます。

編集:例えば、ボタンを持つviewcontroller.xibがあります。実際のデバイスに応じて2つの異なるボタンサイズがあります。 iPhoneの場合、ボタンの寸法は50 x 50です。iPadの場合、寸法は430 x 430です。インターフェースビルダーでは、これが正しく表示されます。ただし、iPadデバイスを使用している場合、ボタンは430 x 430と仮定すると50 x 50と表示されます。

+0

「サイズ」とはどういう意味ですか? iPhoneでは、ポップオーバーは表示されません。フルスクリーン表示のView Controllerが表示されます。だから、どのように "サイズ"をすべきか知っていますか?スクリーンショットを表示してください。 – matt

+0

たとえば、ボタンを持つviewcontroller.xibがあります。実際のデバイスに応じて2つの異なるボタンサイズがあります。 iPhoneの場合、ボタンの寸法は50 x 50です。iPadの場合、寸法は430 x 430です。インターフェースビルダーでは、これが正しく表示されます。ただし、iPadデバイスを使用している場合、ボタンは430 x 430と思われる場合は50 x 50と表示されます。また、iPhoneでもポップオーバーがあります。 – Weakman10122

+0

さて、私は今理解しています。 – matt

答えて

2

ストーリーボードの条件制約は、のを使用します。

iPad上のポップオーバー表示されたビューコントローラの水平サイズクラスは、iPhoneと同じようにコンパクトです。そのため、ボタンのiPhoneサイズが表示されます。

これが正しいことを確認するには、ViewControllerクラスのviewDidAppear:をNSLog self.traitCollectionにオーバーライドします。水平サイズのクラスがコンパクトであることがわかります。

PopoverはiPad上に現れるiPhoneサイズのウィンドウのようなものなので、これは理にかなっています。実際には、それは全体のポップオーバーのです。

+0

複数のxibファイル(xibを使用しています)を使用せずに、iPhoneとiPad用に2つの異なるサイズのボタンがあります。また、私は正しい答えをあなたに与えるつもりです。 – Weakman10122

+0

はい、あります。プレゼンテーションコントローラにポップオーバーになるように指示して、特性コレクションが通常の幅を持つことを伝えることができます。 https://developer.apple.com/reference/uikit/uipresentationcontroller/1618335-overridetraitcollection?language=objc – matt

+0

これまでのところ素晴らしいです。どうもありがとうございます。 – Weakman10122

関連する問題