iOS 7および8で解決した方法は次のとおりです。
iOS 8では、iOSは、ポップオーバーで必要なビューをpresentingViewControllerビューコントローラーのpresentedViewControllerに暗黙的にラップします。彼らがこれに触れているpopovercontrollerの新機能を説明する2014 WWDCビデオがあります。
とにかく、ナビゲーションコントローラースタック上に表示され、すべて独自のサイズを必要とするビューコントローラーの場合、これらのビューコントローラーは(iOS 8では)このコードを呼び出して、preferredContentSizeを動的に設定する必要があります。
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);
heightOfTableを計算されたテーブルまたはビューの高さに置き換えます。
多くの重複コードを回避し、一般的なiOS 7およびiOS 8ソリューションを作成するために、UITableViewControllerにカテゴリを作成して、viewDidAppearが私のテーブルビューで呼び出されたときにこの作業を実行します。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setPopOverViewContentSize];
}
Category.h:
#import <UIKit/UIKit.h>
@interface UITableViewController (PreferredContentSize)
- (void) setPopOverViewContentSize;
@end
Category.m:
#import "Category.h"
@implementation UITableViewController (PreferredContentSize)
- (void) setPopOverViewContentSize
{
[self.tableView layoutIfNeeded];
int heightOfTable = [self.tableView contentSize].height;
if (heightOfTable > 600)
heightOfTable = 600;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)
self.preferredContentSize=CGSizeMake(320, heightOfTable);
else
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);
}
}
@end
viewWillAppear:
)リセットしますか?