这是我为 iOS 7 和 8 解决的方法:
在 iOS 8 中,iOS 默默地将你想要在 popover 中的视图包装到presentingViewController 视图控制器的presentedViewController 中。有一个 2014 年的 WWDC 视频解释了他们接触到的 popovercontroller 的新功能。
无论如何,对于出现在导航控制器堆栈上的所有视图控制器都需要自己的大小,这些视图控制器需要(在 iOS 8 下)调用此代码来动态设置首选内容大小:
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);
将 heightOfTable 替换为您的计算表或视图高度。
为了避免大量重复代码并创建通用的 iOS 7 和 iOS 8 解决方案,我在 UITableViewController 上创建了一个类别,以便在我的 tableviews 中调用 viewDidAppear 时执行这项工作:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setPopOverViewContentSize];
}
类别.h:
#import <UIKit/UIKit.h>
@interface UITableViewController (PreferredContentSize)
- (void) setPopOverViewContentSize;
@end
类别.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