在iOS上的navigationController推送上更改contentSizeForViewInPopover



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

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

这很好。弹出窗口的大小已调整。当另一个视图被推到导航堆栈上时,弹出窗口的大小会再次设置-需要不同的高度-在视图中WillAppear方法:

self.contentSizeForViewInPopover = CGSizeMake(320, 700);

这也很好。当我返回到以前的视图时,大小不会改变。

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

在视图之间导航时,如何管理popover的大小调整?

我使用这个破解:

- (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;
}

这是一个棘手的问题。我尝试了很多方法,终于使这一方法奏效了。这可能对你也有用。

在我的contentViewController中,我保留了对UIPopoverController*父级的引用;

此引用是在初始化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];
}

相关内容

  • 没有找到相关文章

最新更新