Предотвращение анимации содержимогоSizeForViewInPopover

У меня есть popover, который содержит UITableView. В раскадровке я установил высоту popover, чтобы она соответствовала всей таблице, и она отображается красиво. Однако в некоторых ситуациях мне нужно отображать меньше ячеек, и в этих случаях я бы хотел изменить высоту popover. Я делаю это так:

- (void)viewDidAppear:(BOOL)animated {
 [super viewDidAppear:animated]; 
 if (trimFourCells) { // reduce the popover 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: не имеет эффекта.


Просто используйте

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

вот так:

[popoverController setPopoverContentSize:size animated:NO];

licensed under cc by-sa 3.0 with attribution.