在iOS上的navigationController push上更改contentSizeForViewInPopover

时间:2012-03-15 10:20:24

标签: iphone ios navigationcontroller uipopover contentsize

我有一个带有navigationController和一组子视图的UIPopoverController。弹出窗口的大小在它显示之前设置:

[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)];

工作正常。弹出窗口显示调整大小。当在导航堆栈上按下另一个视图时,再次设置弹出窗口的大小 - 需要不同的高度 - 在viewWillAppear方法中:

self.contentSizeForViewInPopover = CGSizeMake(320, 700);

这也很好。当我回到上一个视图时,尺寸不会改变。

我在第一个视图中的viewWillAppear中添加了相同的调用,但视图没有调整大小。

如何在视图之间导航时管理弹出框的大小调整?

2 个答案:

答案 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];
}