iOS 7 및 8에서 해결 한 방법은 다음과 같습니다.
iOS 8에서 iOS는 popover에서 원하는 뷰를 presentingViewController 뷰 컨트롤러의 presentViewController로 자동 래핑합니다. 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:
있습니까?