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

Posted

技术标签:

【中文标题】在 uipopovercontroller 中推送一个新的 tableViewController 会导致调整弹出框的大小【英文标题】:push a new tableViewController in a uipopovercontroller causes the popover to be resized 【发布时间】:2011-10-31 18:15:16 【问题描述】:

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

我有一个推送导航控制器的 UIPopoverController。当我展示这个弹出框时,我将 contentSizeForPopover 设置为 340,340。这很好用。在弹出窗口中,我有一个按钮,它将一个新的 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 再次设置这个值?谢谢。

【问题讨论】:

如果你持有对弹出框的引用,当你点击返回按钮时,你应该可以说类似[popover setPopoverContentSize:CGSizeMake:(340, 340)]; 【参考方案1】:

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

【讨论】:

所以它成功了一半。我现在创建了一个方法来将 popoverContentSize 设置为我想要的大小。我使用观察者模式(使用 NSNotification)调用该方法。所以我看到 UITableView 调整大小,然后它又变大了。我将通知放在我原来帖子中的块之后。如果我将通知移动到稍后的某个时间,例如在选择表中的某些内容之后,那么它会保持较小的大小。这看起来很笨重,因为表格变大了,你点击,然后它变小了。关于我可以将通知放在哪里的任何想法?谢谢。 您是否尝试在视图控制器的 viewWillAppear: 方法中设置大小?我会设置弹出窗口的大小 (setPopoverContentSize:animated:) 和控制器的视图 (self.contentSizeForViewInPopover = CGSizeMake(340.0, 340.0);)。【参考方案2】:

你所要做的就是:

-在popOvers contentView的viewWillAppear方法中,添加下面给出的sn -p。您必须在第一次加载 popOver 时指定它的大小。

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

【讨论】:

以上是关于在 uipopovercontroller 中推送一个新的 tableViewController 会导致调整弹出框的大小的主要内容,如果未能解决你的问题,请参考以下文章

在 UIPopOverController 中显示 Master/Detail UITableView

UIPopoverController 奇怪的调整大小行为

在 iOS 上的 navigationController 推送上更改 contentSizeForViewInPopover

在 UIPopoverController 中显示 UIViewController

UIPopoverController 上的 UIPopoverController

在 UIPopoverController 中显示 UItableViewController