5

我有一个带有 navigationController 和一堆子视图的 UIPopoverController。弹出框的大小是在显示之前设置的,如下所示:

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

这很好用。弹出框以调整后的大小显示。当另一个视图被推送到导航堆栈时,再次设置弹出框的大小 - 需要不同的高度 - 在 vi​​ewWillAppear 方法中:

self.contentSizeForViewInPopover = CGSizeMake(320, 700);

这也很好用。当我返回上一个视图时,大小不会改变。

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

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

4

2 回答 2

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;
}
于 2012-03-15T10:34:16.160 回答
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];
}
于 2012-03-15T11:29:43.160 回答