我有一个包含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
,这甚至没有改变高度。
答案 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];