Легкая сдоба со встроенным контроллером навигации не уважает размер на военно-морской спине

У меня есть UIPopoverController, размещающий UINavigationController, который содержит маленькую иерархию контроллеров представления.

Я следовал документам и для каждого контроллера представления, я установил размер контекста легкой сдобы представления как так:

[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];

(размер, отличающийся для каждого контроллера)

Это работает как ожидалось, поскольку я перешел вперед в иерархии - легкая сдоба автоматически анимирует изменения размера для соответствия продвинутому контроллеру.

Однако, когда я перешел "Назад" через стопку представления через Кнопку "Назад" панели навигации, легкая сдоба не изменяет размер - это остается столь большим как самое глубокое достигнутое представление. Это кажется поврежденным мне; я ожидал бы, что легкая сдоба будет уважать размеры, которые настраиваются, поскольку она появляется через стопку представления.

Я пропускаю что-то?

Спасибо.

88
задан Julian Król 22 October 2014 в 12:21
поделиться

3 ответа

Вам нужно снова установить размер содержимого в viewWillAppear . Вызывая метод delagate, в котором вы устанавливаете размер popovercontroller. У меня была такая же проблема. Но когда я добавил это, проблема решилась.

Еще одна вещь: если вы используете бета-версии меньше 5. Тогда управлять всплывающими окнами будет сложнее. По сравнению с бета-версией 5 они кажутся более дружелюбными. Хорошо, что финальная версия вышла. ;)

Надеюсь, это поможет.

8
ответ дан 24 November 2019 в 07:34
поделиться

Я сбрасываю размер в анимационном методе 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;
}
3
ответ дан 24 November 2019 в 07:34
поделиться

Для меня это решение работает. Это метод моего контроллера представления, который расширяет 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]; 
 }
1
ответ дан 24 November 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: