3 回答

TA貢獻1858條經驗 獲得超8個贊
這是我為iOS 7和8解決的方法:
在iOS 8中,iOS會將您在彈出窗口中所需的視圖無提示地包裝到presentingViewController視圖控制器的presentedViewController中。有一個2014年的WWDC視頻,解釋了popovercontroller的新功能。
無論如何,對于在導航控制器堆棧上顯示的視圖控制器,它們都希望自己調整大小,這些視圖控制器需要(在iOS 8下)調用此代碼來動態設置preferredContentSize:
self.presentingViewController.presentedViewController.preferredContentSize = CGSizeMake(320, heightOfTable);
用您計算出的表或視圖高度替換heightOfTable。
為了避免大量重復代碼并創建常見的iOS 7和iOS 8解決方案,我在UITableViewController上創建了一個類別,以在tableviews中調用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

TA貢獻1796條經驗 獲得超4個贊
這是對krasnyk答案的改進。
您的解決方案很棒,但動畫效果不佳。
進行一些改進可以使動畫效果更好:
刪除- (void) forcePopoverSize方法中的最后一行:
- (void) forcePopoverSize {
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
}
將[self forcePopoverSize]放在- (void)viewWillAppear:(BOOL)animated方法中:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self forcePopoverSize];
}
最后-在- (void)viewDidAppear:(BOOL)animated方法中設置所需的大小:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
分享編輯
- 3 回答
- 0 關注
- 567 瀏覽
添加回答
舉報