У меня есть UIPopoverController, размещающий UINavigationController, который содержит маленькую иерархию контроллеров представления.
Я следовал документам и для каждого контроллера представления, я установил размер контекста легкой сдобы представления как так:
[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];
(размер, отличающийся для каждого контроллера)
Это работает как ожидалось, поскольку я перешел вперед в иерархии - легкая сдоба автоматически анимирует изменения размера для соответствия продвинутому контроллеру.
Однако, когда я перешел "Назад" через стопку представления через Кнопку "Назад" панели навигации, легкая сдоба не изменяет размер - это остается столь большим как самое глубокое достигнутое представление. Это кажется поврежденным мне; я ожидал бы, что легкая сдоба будет уважать размеры, которые настраиваются, поскольку она появляется через стопку представления.
Я пропускаю что-то?
Спасибо.
Вам нужно снова установить размер содержимого в viewWillAppear
. Вызывая метод delagate, в котором вы устанавливаете размер popovercontroller. У меня была такая же проблема. Но когда я добавил это, проблема решилась.
Еще одна вещь: если вы используете бета-версии меньше 5. Тогда управлять всплывающими окнами будет сложнее. По сравнению с бета-версией 5 они кажутся более дружелюбными. Хорошо, что финальная версия вышла. ;)
Надеюсь, это поможет.
Я сбрасываю размер в анимационном методе viewWillDisappear: (BOOL) контроллера представления, из которого выполняется обратная навигация:
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
CGSize contentSize = [self contentSizeForViewInPopover];
contentSize.height = 0.0;
self.contentSizeForViewInPopover = contentSize;
}
Затем, когда отображается представление, к которому выполняется обратная навигация, я сбрасываю соответствующий размер:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
CGSize contentSize;
contentSize.width = self.contentSizeForViewInPopover.width;
contentSize.height = [[self.fetchedResultsController fetchedObjects] count] * self.tableView.rowHeight;
self.contentSizeForViewInPopover = contentSize;
}
Для меня это решение работает. Это метод моего контроллера представления, который расширяет UITableViewController и является корневым контроллером для UINavigationController.
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.contentSizeForViewInPopover = self.tableView.bounds.size;
}
И не забудьте установить размер содержимого для контроллера представления, который вы будете помещать в стек навигации
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
dc = [[DetailsController alloc] initWithBookmark:[[bookmarksArray objectAtIndex:indexPath.row] retain] bookmarkIsNew:NO];
dc.detailsDelegate = self;
dc.contentSizeForViewInPopover = self.contentSizeForViewInPopover;
[self.navigationController pushViewController:dc animated:YES];
}