在uipopovercontroller中推送一个新的tableViewController会导致调整popover的大小

时间:2011-10-31 18:15:16

标签: iphone uipopovercontroller

我找到了这个帖子,但它仍然无法解决我的问题。 UIPopoverController automatically resizing to max height on pushViewController

我有一个推送导航控制器的UIPopoverController。当我提出这个popover时,我将contentSizeForPopover设置为340,340。这很好。在popover中,我有一个按钮,它将一个新的UITableViewController推送到已经存在的UIPopoverController(下面的tableViewController代码)。

UITableViewController *contentView = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
contentView.tableView.delegate = self;
contentView.tableView.dataSource = self;
[self.navigationController pushViewController:contentView animated:YES];
[contentView release];

当推送tableView时,高度会增加到iPad的最大高度。当我按下后退按钮时,高度仍处于最大高度,并且不会返回到最初创建UIPopoverController时定义的340,340高度。有没有办法为我创建的新tableView再次设置此值?感谢。

2 个答案:

答案 0 :(得分:3)

根据我对UIPopoverController个对象的体验,只要将新内容添加到弹出框中,弹出框就会使用最大高度。每次更改内容时,我都会向popover控制器发送一条setPopoverContentSize:animated:消息,这当然要求我在每个可能导致popover调整大小的对象中保留对该popover控制器的引用。您可以在问题中的示例代码之后立即添加该消息,以防止弹出窗口大小调整,但是当您从UINavigationController堆栈弹出此视图时它仍然可以调整大小,因此可能需要另一个消息发送。也许弹出窗口中可能出现的每个视图控制器都会以setPopoverContentSize:animated:方法发送viewWillAppear:消息。每个人都会有一个对弹出控制器的引用。

答案 1 :(得分:1)

你所要做的就是:

- 在popOvers contentView的viewWillAppear方法中,添加下面给出的代码段。您必须在加载时首次指定popOver的大小。

-(void)viewWillAppear{
CGSize size = CGSizeMake(width,height);
self.contentSizeForViewInPopover = size;
}