我如何使UIPopoverPresentationController调整导航popup?

我使用UIPopoverPresentationController在iOS应用程序中popup。 当一个popup窗口中的导航控制器推动一个新的视图控制器时,popup窗口调整到该视图控制器的preferredContentSize 。 但是,当导航控制器从视图控制器popup堆栈时,popup窗口不会调整为以前的大小。 我怎样才能做到这一点?

这个问题的可能重复,但为现代UIPopoverPresentationController

更新:看这里的例子代码说明问题。 克隆它,并在iPad模拟器中运行它。 点击popupbutton,你会得到一个导航控制器的popup窗口。 点击推杆button项目,你会得到一个新的更高的VC堆栈(大小在导航栏中)。 stream行,并没有调整回到原来的样子。

添加以下行:

 self.navigationController.preferredContentSize = self.preferredContentSize; 

到你的viewWillAppear:方法,现在看起来像这样:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if (self.navigationController) { UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"Push" style:UIBarButtonItemStylePlain target:self action:@selector(onPush)]; self.navigationItem.rightBarButtonItem = item; self.navigationItem.title = NSStringFromCGSize(self.preferredContentSize); self.view.backgroundColor = [UIColor lightGrayColor]; self.navigationController.preferredContentSize = self.preferredContentSize; } } 

它会确保导航控制器的首选大小在每次显示的视图控制器更改时都会更新。 我在你的示例代码上testing了它,并解决了这个问题。

只需添加您的ViewController下一个代码

 - (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100); } 

这是video 。 希望这是你期待得到的行为。