Как изменить размер PopoverView при отключении дополнительных контроллеров просмотра
-
25-10-2019 - |
Вопрос
Я создал приложение iPad Master/Detail Master/Detail, используя поставляемый шаблон. Он создает два контроллера представления (мастер и деталь). Я создал контроллеры для дополнительных представлений, которые появляются на вершине контроллера Master View (в значительной степени просверлить просмотр таблиц, пока, наконец, не нажмет на ячейку, которая заполняет представление подробно. к указанным измерениям (код ниже также показывает, когда выбран выбора из основного представления контроллера TableView):
@implementation MasterViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.vehicles = [[NSArray alloc] initWithObjects:@"Cars", @"Trucks", @"Boats", nil];
self.title = @"Vehicle Type";
self.clearsSelectionOnViewWillAppear = NO;
self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
}
return self;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (!self.studySessionViewController)
{
self.secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
}
[self.navigationController pushViewController:self.secondViewController animated:YES];
}
Когда попвер выбирается при первом загрузке приложения, все выглядит великолепно. Однако, когда пользователь нажимает обратно в MasterViewController, размер Popover составляет тот же размер, что и самый большой контроллер представления, который был нажат на стек. Я искал и добавил следующий код в классе контроллера мастера:
- (void)viewWillAppear:(BOOL)animated
{
self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
[super viewDidAppear:animated];
}
Однако это не имеет никакого эффекта. Также после того, как поповер закрыт (либо вращением, либо отказавшись от выбора Поповер на пользовательском интерфейсе), размер попора самого большого контроллера вида таблицы, который ранее был нажат на стек, все еще сохраняется и полностью игнорирует вышеуказанные измерения. Что мне не хватает?
Решение
Я не мог понять всю вашу проблему, но я думаю, что основой вашей проблемы является плохой размер попора.
Обычно проблемы с размером с поп -ей возникают из -за того, что [UIViewController contentSizeForViewInPopover]
может быть установлен только перед созданием UIPopoverController
пример. Это просто значение по умолчанию для размера Попора.
Когда вы создаете UIPopoverController
экземпляр с вашим контроллером в качестве содержимого, contentSizeForViewInPopover
скопирован в [UIPopoverController popoverContentSize]
И никогда больше не читайте. Если вы измените его на содержимое, размер Popover не обновляется.
Единственный способ, как вы можете изменить размер уже созданного UIPopoverController
экземпляр использует свойство [UIPopoverController popoverContentSize]
или метод [UIPopoverController setPopoverContentSize:animated:]
.
Другие советы
Вы пытаетесь установить размер Popover в самом MasterViewController. Здесь лежит проблема. За self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0);
Для работы вам придется использовать это в DetailsViewController, так как DeftainViewController - это тот, который имеет Popover. Основная идея здесь заключается в том, что вы устанавливаете размер в контроллере Parent View, а не в самом контроллере.
Вам придется настроить рамки.
incomingCallViewController = [[IncomingCallViewController alloc]initWithNibName:@"IncomingCallViewController" bundle:nil];
[incomingCallViewController.view setFrame:CGRectMake(400, 200, 377, 243)];
[self.navigationController pushViewController:incomingCallViewController.view];
Это, конечно, пример кода из одного из моих проектов, замените вход.