Ось як я це вирішив для iOS 7 і 8:
У iOS 8 iOS мовчки обертає потрібний вигляд у покажчику в представленийViewController контролера подання presentingViewController. Є відео WWDC 2014 року, в якому пояснюється, що нового у контролері popover, де вони торкаються цього.
У будь-якому випадку, для контролерів перегляду, представлених у стеку контролера навігації, які всі хочуть власні розміри, цим контролерам подання потрібно (під iOS 8) викликати цей код, щоб динамічно встановлювати preferContentSize:
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
Категорія м:
#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:)?