2012-07-17 81 views
0

我有一个包含UITableView的弹出窗口。在故事板中,我将弹出高度设置为适合整个表格,并且显示效果很好。但是,在某些情况下,我需要显示更少的单元格,在这种情况下,我想更改弹出窗口的高度。我这样做是这样的:防止contentSizeForViewInPopover动画

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    if (trimFourCells) { // reduce the popover's height by that of four cells 
     CGSize size = self.contentSizeForViewInPopover; 
     size.height -= 4*60; 
     self.contentSizeForViewInPopover = size; 
    } 
} 

它运作良好,只是改变动画:首先显示的全尺寸,那么它在大约一秒钟收缩。

我的问题是这个动画是否可以禁用。

我试图通过NO[super viewDidAppear:animated],甚至试图在大小更改后移动该行。它并没有阻止动画。然后我试着将代码移动到viewWillAppear,那甚至没有改变高度。

回答

2

感谢@frowing,这里是解决方案。不必改变popover代码中的大小,它必须在调用者中完成。我已经添加如下代码到prepareForSegue

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    UIPopoverController *pc = ((UIStoryboardPopoverSegue*)segue).popoverController; 
    if (trim_nCells > 0) { // trim that many cells from the table 
     CGSize size = pc.contentViewController.contentSizeForViewInPopover; 
     size.height -= trim_nCells * cellHeight; 
     [pc setPopoverContentSize:size animated:NO]; 
    } 
    (... rest of the prep code ...) 
} 

注意,因为它显示以前做过,没有介入的动画,所以animated:参数的时价值没有任何影响。

1

只需使用

- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated 

这样的:

[popoverController setPopoverContentSize:size animated:NO]; 
+0

谢谢@frowing。这解决了这个问题,但引入了闪烁的新问题。弹出窗口显示为全尺寸,然后一秒钟后调整大小。我试图通过在调整大小后移动'[super viewDidAppear:animated]'行来解决这个问题,但它没有帮助。 我假设在调用' - (void)viewDidAppear:(BOOL)animated'时,弹出窗口已经显示完整大小,因此必须事先进行任何大小调整。 – cshavit 2012-07-17 20:24:46

+0

在显示弹出窗口之前设置内容大小。从'viewDidAppear:'方法中移除调整大小的代码。 – 2012-07-18 07:21:11

+0

谢谢@frowing。我将代码从'viewDidAppear:'移到'viewWillAppear:'。我试图把它放在'[super viewWillAppear:animated];'行之后,然后在这行之后。在这两种情况下都没有发生调整。看起来'setPopoverContentSize:(CGSize)大小动画:(BOOL)动画' 在'viewWillAppear:'内调用时没有效果。同样,直接在'viewWillAppear:'中设置控制器的大小,如'ctrl.popoverContentSize = size;'没有效果。当然,我错过了一些东西,因为在弹出窗口显示之前我找不到调整方式。我只能在调整后重新调整。 – cshavit 2012-07-18 14:18:15