从动画中阻止contentSizeForViewInPopover

时间:2012-07-17 18:47:25

标签: ios ipad

我有一个包含UITableView的弹出框。在故事板中,我设置了弹出高度以适应整个表格,并且它显示得很好。但是,在某些情况下,我需要显示更少的单元格,在这些情况下,我想改变弹出窗口的高度。我是这样做的:

- (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 个答案:

答案 0 :(得分: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 :(得分:1)

只需使用

- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated
像这样:

[popoverController setPopoverContentSize:size animated:NO];