Bunu iOS 7 ve 8 için şu şekilde çözdüm:
İOS 8'de, iOS, açılır pencerede istediğiniz görünümü, presentingViewController görünüm denetleyicisinin sunulanViewController'ına sessizce kaydırıyor. Popovercontroller ile bu konuya değindikleri yenilikleri açıklayan 2014 WWDC videosu var.
Her neyse, gezinme denetleyicisi yığınında sunulan ve tümü kendi boyutlandırmasını isteyen görünüm denetleyicileri için, bu görünüm denetleyicilerinin (iOS 8 altında) tercih edilenContentSize değerini dinamik olarak ayarlamak için bu kodu çağırması gerekir:
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable)
HeightOfTable'ı hesaplanan tablonuzla veya görünüm yüksekliğiyle değiştirin.
Çok sayıda yinelenen koddan kaçınmak ve ortak bir iOS 7 ve iOS 8 çözümü oluşturmak için, tablo görünümlerimde viewDidAppear çağrıldığında bu işi gerçekleştirmek için UITableViewController'da bir kategori oluşturdum:
- (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:?