ここに私の問題があります。
ナビゲーションバーボタンからポップオーバーを表示したい(正常に動作します)。
ポップオーバーの contentviewcontroller は、rootviewcontroller として UITableViewController を持つ UINavigationController です。
プレゼンテーションは正常に機能します。
次に、テーブルビューのセルを選択すると、別のビューコントローラーがナビゲーションスタックにプッシュされます。
ビューコントローラーは正しくプッシュされますが、ここで奇妙なことが表示されます。
ポップオーバーは、コンテンツのサイズが変更される前に (アニメーションなしで) サイズ変更され始めます (アニメーションあり)。
これは、ポップオーバーを作成して提示する方法です。
UINavigationController* adsl_navctl = [[[UINavigationController alloc] initWithRootViewController:adsl_newnedit] autorelease];
self.adsc_current_popover = [[[dsd_popover_controller alloc] initWithContentViewController:adsl_navctl] autorelease];
_adsc_current_popover.delegate = self;
[adsl_newnedit.tableView layoutIfNeeded];
_adsc_current_popover.popoverContentSize = CGSizeMake(_adsc_current_popover.popoverContentSize.width, adsl_newnedit.tableView.contentSize.height + 38);
[_adsc_current_popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
ポップオーバーのサイズを変更する方法は次のとおりです。self.contentSizeForViewInPopover はまだどこにも設定されていません。
これは、uinavigationcontroller に表示されるすべてのビューコントローラーにあります。もちろん、サイズは毎回同じではありません。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[UIView animateWithDuration:0.3 animations:^{
[self forcePopoverSize];
}];
}
}
- (void)forcePopoverSize {
CGSize currentSetSizeForPopover = CGSizeMake(320, self.tableView.contentSize.height);
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
私の問題をよりよく理解できるように、いくつかのスクリーンショットを示します (申し訳ありませんが、新しいユーザーなので、写真を直接投稿することはできません)。
http://i.stack.imgur.com/copoA.png
http://i.stack.imgur.com/zJN1b.png
ポップオーバーのサイズが既に変更されていても、コンテンツは以前のポップオーバー サイズのままです。通常、両方を同時にサイズ変更する必要があります
編集:しばらくして、これをもう一度調べてみたところ、最終的に解決策が見つかりました。この質問では、「adnako」による回答が私の問題を解決しました。