我有一个带有navigationController和一组子视图的UIPopoverController。弹出窗口的大小在它显示之前设置:
[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)];
工作正常。弹出窗口显示调整大小。当在导航堆栈上按下另一个视图时,再次设置弹出窗口的大小 - 需要不同的高度 - 在viewWillAppear方法中:
self.contentSizeForViewInPopover = CGSizeMake(320, 700);
这也很好。当我回到上一个视图时,尺寸不会改变。
我在第一个视图中的viewWillAppear中添加了相同的调用,但视图没有调整大小。
如何在视图之间导航时管理弹出框的大小调整?
答案 0 :(得分:3)
我使用这个黑客:
- (CGSize)contentSizeForViewInPopover
{
return CGSizeMake(320, 200);
}
- (void) forcePopoverSize
{
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f,
currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self forcePopoverSize];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
答案 1 :(得分:3)
这是一个棘手的问题。我尝试了很多东西,最后得到了这个。它也可能适合你。
在我的contentViewController
我保留对UIPopoverController
* parent;
此参考是在UIPopoverController
的初始化期间设置的,并且是内容。
这当然可能不适合您的视图层次结构。 UIViewController
中的代码
显示UIPopowerController
的内容类似于:
if (self.popoverController == nil) {
_contentController = [[ContentViewController alloc] initWithNibName:@"ContentViewController"
bundle:[NSBundle mainBundle]];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:_contentController];
_contentController.parent = popover;
[popover setPopoverContentSize: CGSizeMake(520.0,580.0)];
popover.delegate = self;
self.popoverController = popover;
}
当我想在contentViewController
内动态更改内容大小时,请使用:
-(void)setNewSize:(CGSize) newSize {
[_parent setPopoverContentSize:newSize animated:YES];
}