ストーリーボードで自動レイアウトを使用しています。セル rect から popoverPresentationController を提示します。
NumberController * viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NumberController"];
UIPopoverPresentationController *pc = [viewController popoverPresentationController];
pc.delegate = self;
pc.permittedArrowDirections = UIPopoverArrowDirectionAny;
pc.sourceView = tableView;
pc.sourceRect = [tableView rectForRowAtIndexPath:indexPath];
[self.navigationController presentViewController:viewController animated:animated completion:nil];
ポップオーバーは、縦向きモードの iPad で矢印を上に表示します。
iPad を回転させてランドスケープ モードにします。popoverPresentationController は同じ sourceView/sourceRect を保持し、適切にセルを指します。また、上矢印も保持します。
しかし、現在はビューの下部にあるため、ポップオーバーはより短い高さにサイズ変更されます。これは望ましくない動作です。
ポップオーバーが単に新しい位置に移動して矢印の方向を変更するだけの場合、サイズを変更する必要はまったくありません。これは望ましい動作です。
次のメソッドを使用すると変更できると思いましたが、sourceView rect が変更されないため呼び出されません。
- (void)popoverController:(UIPopoverController *)popoverController
willRepositionPopoverToRect:(inout CGRect *)rect
inView:(inout UIView **)view {
}
allowedArrowDirections をリセットしようとしました (preferredContentSize で、これが最も論理的な場所のように思われたため)。これは機能しません (ポップオーバーはまだサイズ変更されます):
- (CGSize) preferredContentSize {
[super preferredContentSize];
self.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUnknown;
return CGSizeMake(DEFAULT_POPOVER_WIDTH,DEFAULT_POPOVER_HEIGHT);
}
ポップオーバーのサイズを変更する代わりに、popoverPresentationController に強制的に矢印の方向を変更させ、ポップオーバーの位置を変更させる方法を見つけることができません。私はそれが不可能だと思い始めています - しかし、私はまだ何かが足りないという希望を持ち続けています.
編集: それまでの間、iPad でサイズを変更したくない場合、ポップオーバーはこのビューを表示する最良の方法ではないかもしれないと思いました。UIModalPresentationFormSheet プレゼンテーションで試してみます。しかし、私はまだこの質問に対する答えを見つけたいと思っています。