Как изменить размер PopoverView при отключении дополнительных контроллеров просмотра

StackOverflow https://stackoverflow.com/questions/8306652

Вопрос

Я создал приложение 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]; 

Это, конечно, пример кода из одного из моих проектов, замените вход.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top