Как изменить размер popoverview при отключении дополнительных контроллеров представления - PullRequest
2 голосов
/ 29 ноября 2011

Я создал голое приложение Master / Detail для iPad, используя прилагаемый шаблон. Создает два контроллера вида (Master и Detail). Я создал дополнительные контроллеры представления, которые появляются поверх главного контроллера представления (в значительной степени детализация табличных представлений до тех пор, пока, наконец, не попадет в ячейку, которая заполняет подробное представление. Я добавил код ниже, чтобы загрузить всплывающий контроллер основного представления к указанным размерам (код ниже также показывает, когда выбор выбирается из табличного представления контроллера основного вида):

@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, размер всплывающего окна совпадает с размером самого большого контроллера представления, который был помещен в стек. Я искал и добавил следующий код в класс контроллера Master View:

- (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];
}

Однако это не имеет никакого эффекта. Также после закрытия всплывающего окна (путем поворота или отмены выбора всплывающего окна в пользовательском интерфейсе) размер всплывающего окна самого большого контроллера табличного представления, который ранее был помещен в стек, все еще сохраняется и полностью игнорирует вышеуказанные измерения. Чего мне не хватает?

Ответы [ 3 ]

6 голосов
/ 09 декабря 2011

Я не мог понять всю вашу проблему, но я думаю, что основа вашей проблемы - плохой размер Popover.

Обычно проблемы с размером Popover возникают из-за того, что [UIViewController contentSizeForViewInPopover] может бытьустанавливается только перед созданием экземпляра UIPopoverController.Это просто значение по умолчанию для размера поповера.

Когда вы создаете экземпляр UIPopoverController с вашим контроллером в качестве его содержимого, contentSizeForViewInPopover копируется в [UIPopoverController popoverContentSize] и никогда больше не читается.Если вы измените его в содержимом, размер Popover не будет обновлен.

Единственный способ изменить размер уже созданного UIPopoverController экземпляра - использовать свойство [UIPopoverController popoverContentSize] или метод [UIPopoverController setPopoverContentSize:animated:].

3 голосов
/ 03 декабря 2011

Вы пытаетесь установить размер поповера в самом MasterViewController.Здесь кроется проблема.Чтобы self.contentSizeForViewInPopover = CGSizeMake(320.0, [vehicles count] * 52.0); работал, вы должны будете использовать это в DetailViewController вместо этого, поскольку DetailViewController имеет всплывающее окно.Основная идея здесь заключается в том, что вы устанавливаете размер в родительском контроллере представления, а не в самом контроллере.

2 голосов
/ 29 ноября 2011

вам нужно будет установить кадры.

incomingCallViewController = [[IncomingCallViewController alloc]initWithNibName:@"IncomingCallViewController" bundle:nil];
            [incomingCallViewController.view setFrame:CGRectMake(400, 200, 377, 243)];

            [self.navigationController pushViewController:incomingCallViewController.view]; 

это, конечно, пример кода из одного из моих проектов, замените InputCallViewController своим собственным классом и объявите его в заголовке

...