阻止UIViewController更改UIPopoverController的内容大小

时间:2014-05-09 09:59:52

标签: ios objective-c uiviewcontroller uinavigationcontroller uipopovercontroller

UINavigationController中展示UIPopoverController时,我会让弹出窗口知道它的大小。因此,如果我们在任何显示弹出窗口的UIViewController内,我们会这样做:

MYNavigationController *fooController = [self.storyboard instantiateViewControllerWithIdentifier:@"fooController"];
self.popover = [[UIPopoverController alloc] initWithContentViewController:fooController];
self.popover.popoverContentSize = CGSizeMake(600, 400);
[self.popover presentPopoverFromRect:CGRectMake(0, 0, 0, 0) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

然而,当我在推出视图控制器的UIViewController之上推送另一个fooController时,会改变弹出窗口的大小。我没有以编程方式强制更改任何内容大小。该视图控制器 调用self.contentSizeForViewInPopover = CGSizeMake(400, 300);因为我真的想 避免 让所有视图控制器知道它们在弹出控制器内。这也可能是此方法甚至已从iOS 7上弃用的原因。还有一个名为preferredContentSize的属性仅适用于iOS 7,但这也会改变popover的内容大小。

所以我的问题是:

  1. 为什么popover的内容大小会发生变化?

  2. 为什么UIPopoverController有一个popoverContentSize 推送视图控制器时自动覆盖此属性 大小 - 没有我作为程序员什么都不做?

  3. 如何防止推送的视图控制器更改它 内容大小?

1 个答案:

答案 0 :(得分:0)

假设iOS 7设置了每个视图控制器实例的preferredContentSize属性。无论是否在弹出窗口中使用实例,都可以进行设置。如果早期iOS版本支持需要在早期版本上运行时设置contentSizeForViewInPopover。您可以创建一个UIViewController子类,从中派生所有VC来实现它。