यहाँ मैंने इसे iOS 7 और 8 के लिए कैसे हल किया:
आईओएस 8 में, आईओएस चुपचाप उस दृश्य को लपेट रहा है जिसे आप पॉपओवर में प्रेजेंट व्यू कॉन्ट्रोलर व्यू कंट्रोलर के प्रस्तुत दृश्य में चाहते हैं। वहाँ एक 2014 WWDC वीडियो है जिसमें बताया गया है कि पॉपओवरकंट्रोलर के साथ नया क्या है जहां वे इस पर स्पर्श करते हैं।
वैसे भी, नेविगेशन कंट्रोलर स्टैक पर प्रस्तुत किए गए व्यू कंट्रोलर के लिए, जो सभी अपने स्वयं के आकार चाहते हैं, इन व्यू कंट्रोलर्स को इस कोड को कॉल करने के लिए गतिशील रूप से पसंदीदा सेट करने के लिए (iOS 8 के तहत) की आवश्यकता होती है:
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, 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:)?