2012-08-06 55 views
17

我有一個UIViewController調用HomeViewController它有一個包含數據數組的模型。 HomeViewController也有一個按鈕,當按下時會顯示一個UITableViewController顯示模型的數據數組。在哪裏設置彈出大小?

我的問題是,什麼是標準/最好的方式來設置popover的大小?我只希望popover的高度足以顯示數據,但不會更高。什麼是常規做法?我認爲我需要在某個時候設置contentSizeForViewInPopover,但我不確定在哪裏...在popover類的viewDidLoad方法中?在prepareForSegue方法?

這裏是我到目前爲止的代碼:(注意DataPresentingViewController是我酥料餅的視圖控制器class`)

//In HomeViewController 
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.destinationViewController isKindOfClass:[DataPresentingViewController class]]) 
    { 
     DataPresentingViewController *dest = (DataPresentingViewController *) segue.destinationViewController; 
     dest.mySavedData = self.myModel.mySavedData; 
    } 
} 

我知道我可以只設置contentSizeForViewInPopover在這裏prepareForSegue方法;然而,這看起來像popover類應該處理的東西。

+0

在下面添加了一個解決方案,該解決方案提供了將彈出窗口大小調整爲任意tableView大小的通用方法。 – memmons 2013-04-07 18:12:13

回答

21

設置contentSizeForViewInPopoverViewDidLoad方法HomeViewController

+13

-contentSizeForViewInPopover:在iOS 7中已被棄用。請改用-setPopoverContentSize:animated:。 – auco 2013-10-03 16:30:44

+18

我相信替換的調用是setPreferredContentSize: – 2013-12-13 16:20:46

1

它看起來像你想以編程方式執行它,但在故事板中,在將視圖控制器連接到segue之前,在屬性檢查器下有一個「彈出窗口,使用顯式大小選項」。也許你可以設置最適合你的應用程序的大小,而不用擔心使用代碼的大小。希望這有助於,讓我們知道它是如何發展的。

+0

問題是,每次運行應用程序時,我的模型都會有不同的大小,因此我無法確定明確的大小 – Nosrettap 2012-08-07 00:13:14

+0

@Nosrettap,是的,如果它發生變化,根本無法工作。那麼,我認爲我至少會嘗試。讓我們貼出你的所作所爲,我很想知道。 – Douglas 2012-08-07 01:00:34

3

今天偶然發現你的問題。你解決了嗎?

你試過:

setPopoverContentSize:<#(CGSize)#> animated:<#(BOOL)#> 
在賽格瑞邏輯塊

。如果您希望彈出窗口的大小根據數據集或查看位置或其他因素而變化,那麼這很有用。

很好。

1

試試下面的代碼:

- (IBAction)setData:(id)sender 
{ 
    UIViewController *popoverContent=[[UIViewController alloc] init]; 
    UITableView *tableView=[[UITableView alloc] initWithFrame:CGRectMake(265, 680, 0, 0) style:UITableViewStylePlain]; 

    UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)]; 

    popoverView.backgroundColor=[UIColor whiteColor]; 

    popoverContent.view=popoverView; 
    popoverContent.contentSizeForViewInPopover=CGSizeMake(200, 420);//setting the size 
    popoverContent.view=tableView; 
    tableView.delegate=self; 
    tableView.dataSource=self; 

    self.popoverController=[[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
    [self.popoverController presentPopoverFromRect:CGRectMake(400, 675, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; 
} 
1

一個鮮爲人知的技巧,調整您的UIPopoverViewController,以配合您UITableView的高度是使用的tableView的rectForSection方法給你高度。請使用您的viewController的contentSizeForViewInPopover高度是這樣的:

- (CGSize)contentSizeForViewInPopover { 
    // Currently no way to obtain the width dynamically before viewWillAppear. 
    CGFloat width = 200.0; 
    CGRect rect = [self.tableView rectForSection:[self.tableView numberOfSections] - 1]; 
    CGFloat height = CGRectGetMaxY(rect); 
    return (CGSize){width, height}; 
} 
56

由於iOS7 contentSizeForViewInPopover已經被淘汰。您應該使用UIViewControllerpreferredContentSize屬性。

希望這會有所幫助!

+1

這似乎並不工作,如果你有一個彈出窗口呈現UINavigationController。我的第二個視圖控制器重置此值,但它不會調整。由於某種原因,它僅取得根視圖控制器的值。 – LightningStryk 2014-05-01 15:17:36

+2

這個值也可以在IB中設置:** ViewController的屬性檢查器**'>>'內容大小'>>'**使用首選顯式大小** – Besi 2016-03-25 18:40:58

+0

這個答案應該被接受。 – tomas789 2017-01-08 09:49:31

6

contentSizeForViewInPopover已被棄用在IOS 7
的屬性:UIPopoverController的popoverContentSize表示由在UIPopoverController的contentViewController屬性視圖控制器管理的內容視圖的大小。
Reference

的優點是它可在iOS 3.2或更高版本,所以你不需要檢查設備版本每次,只需更換contentSizeForViewInPopover方法與UIPopOverController對象實例。

2

// self.contentSizeForViewInPopover = CGSizeMake(320.0,600.0); //在ios7中已棄用

self.preferredContentSize = CGSizeMake(320.0,600.0); //用來代替