นี่คือวิธีที่ฉันแก้ไขสำหรับ iOS 7 และ 8:
ใน iOS 8 iOS จะตัดมุมมองที่คุณต้องการในป็อปโอเวอร์ลงในการนำเสนอ ViewController ของตัวควบคุมมุมมองการนำเสนอ ViewController มีวิดีโอ WWDC ปี 2014 ที่อธิบายว่ามีอะไรใหม่ในตัวควบคุมป๊อปโอเวอร์ที่พวกเขาสัมผัสกับสิ่งนี้
อย่างไรก็ตามสำหรับตัวควบคุมมุมมองที่แสดงบนสแต็กตัวควบคุมการนำทางที่ทุกคนต้องการขนาดของตัวเองตัวควบคุมมุมมองเหล่านี้ต้องการ (ภายใต้ iOS 8) เพื่อเรียกรหัสนี้เพื่อตั้งค่าเนื้อหาที่ต้องการแบบไดนามิก:
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable)
แทนที่ heightOfTable ด้วยตารางคำนวณหรือความสูงของมุมมอง
เพื่อหลีกเลี่ยงรหัสซ้ำกันจำนวนมากและเพื่อสร้างโซลูชัน iOS 7 และ iOS 8 ทั่วไปฉันจึงสร้างหมวดหมู่บน UITableViewController เพื่อทำงานนี้เมื่อ viewDidAppear ถูกเรียกใน tableview ของฉัน:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setPopOverViewContentSize];
}
Category.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
viewWillAppear:
) หรือไม่?