我在iOS应用中使用UIPopoverPresentationController
进行弹出式广告。当弹出窗口中的导航控制器推送新的视图控制器时,弹出框会调整大小到该视图控制器的preferredContentSize
。但是当导航控制器将视图控制器弹出堆栈时,弹出框不会调整为以前的大小。我该怎么做呢?
this question可能重复,但对于现代UIPopoverPresentationController
。
更新:有关说明问题的示例代码,请参阅here。克隆它并在iPad模拟器中运行它。点击“弹出”按钮,您将获得带有导航控制器的弹出窗口。点击“推杆”按钮项,您将在堆栈上获得一个新的更高的VC(大小在导航栏中)。 Pop并没有将其重新调整为原来的状态。
答案 0 :(得分:19)
添加以下行:
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;
}
}
每次显示的视图控制器发生变化时,都会确保更新导航控制器的首选大小。我在你的示例代码上测试了它,它解决了这个问题。
答案 1 :(得分:2)
只需添加ViewController
下一个代码
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100);
}
这是video。希望这是你期望获得的行为。