нажмите новый tableViewController в uipopovercontroller вызывает изменение размера popover - PullRequest
2 голосов
/ 31 октября 2011

Я нашел эту ветку, но она все еще не решает мою проблему. UIPopoverController автоматически изменяет размер до максимальной высоты на pushViewController

У меня есть UIPopoverController, который выдвигает навигационный контроллер. Когда я представляю этот поповер, я устанавливаю для contentSizeForPopover значение 340,340. Это отлично работает. Во всплывающем окне у меня есть кнопка, которая помещает новый UITableViewController в уже существующий UIPopoverController (код ниже для tableViewController).

UITableViewController *contentView = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
contentView.tableView.delegate = self;
contentView.tableView.dataSource = self;
[self.navigationController pushViewController:contentView animated:YES];
[contentView release];

При нажатии на tableView высота увеличивается до максимальной высоты iPad. Когда я нажимаю кнопку «Назад», высота все еще находится на максимальной высоте и не возвращается к высоте 340 340, которая была определена при первоначальном создании UIPopoverController. Есть ли способ установить это значение снова для нового созданного мной tableView? Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

По моему опыту с UIPopoverController объектами, поповер, кажется, использует максимальную высоту всякий раз, когда в поповер добавляется новый контент.Я отправляю поповерному контроллеру сообщение setPopoverContentSize:animated: каждый раз, когда меняю содержимое, что, конечно, требует от меня сохранения ссылки на этот поповерный контроллер в каждом объекте, который может вызвать изменение размера поповера.Вы можете добавить это сообщение, отправленное сразу после вашего примера кода в вашем вопросе, чтобы предотвратить изменение размера всплывающего окна, но оно все равно может измениться, когда вы вытолкаете это представление из стека UINavigationController, поэтому может потребоваться еще одна отправка сообщения.Возможно, каждый контроллер представления, который может появиться во всплывающем окне, отправит сообщение setPopoverContentSize:animated: в своем методе viewWillAppear:.У каждого также будет ссылка на контроллер поповера.

1 голос
/ 06 апреля 2012

Все, что вам нужно сделать, это:

- В методе viewWillAppear объекта popOvers contentView добавьте фрагмент, приведенный ниже.При первой загрузке вам нужно будет указать размер popOver.

-(void)viewWillAppear{
CGSize size = CGSizeMake(width,height);
self.contentSizeForViewInPopover = size;
}
...