UIPopoverController странное поведение при изменении размера

Я разработал статическую библиотеку для iPhone, используя UINavigationController и несколько UIViewController.

Я реализую способ, позволяющий разработчикам iPad включать мою библиотеку в свои приложения для iPad. Для этого я хочу отобразить контроллеры моей библиотеки в UIPopoverController, размер которого равен размеру iphone.

Это я разработал, но каждый раз, когда я нажимаю новый viewController, Popover очень странно изменяет свой размер:

введите здесь описание изображения

Я проверил свои контроллеры представления (через построитель интерфейса), и поведение AutoResize деактивировано.

У кого-нибудь есть решение?


person Martin    schedule 06.07.2012    source источник


Ответы (3)


UIViewController, отображаемый UIPopoverViewController, должен установить это свойство:

contentSizeForViewInPopover

чтобы указать отображаемый размер, а размер UIPopoverViewController изменится в соответствии со значением этого свойства. Например:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.contentSizeForViewInPopover = self.view.frame.size;
    // Do any additional setup after loading the view from its nib.
}
person Khanh    schedule 06.07.2012
comment
Спасибо, я не знал, что это так просто! - person Martin; 06.07.2012
comment
Начиная с iOS7 и выше, это свойство устарело. Вместо этого используйте предпочитаемыйContentSize. - person Mr. Zystem; 29.05.2015

Насколько я понимаю вашу проблему, размер всплывающего окна изменяется всякий раз, когда вы нажимаете контроллер на UINavigationController, который является корневым контроллером вашего UIPopoverController. Я не могу сказать, почему это происходит, но вы можете избавиться от этого, отправив ссылку вашего popoverController (popoverControllerReference, вы можете создать ссылку singleton) на ваш контроллер представления и вручную установив popoverContentSize всякий раз, когда вы нажимаете контроллеры: popoverControllerReference.popoverContentSize = CGSizeMake(320, 460);

person tipycalFlow    schedule 06.07.2012
comment
Да, я пробовал это, но даже если я вызывал вручную popoverContentSize в методе wiewWillAppear, это всегда происходило до того, как UIVewController сам вызывал его с неправильным размером. - person Martin; 06.07.2012

В принятом ответе используется метод, который устарел в iOS 7.0.

У меня была такая же проблема, и я успешно использовал popoverContentSize.

Кое-что об этом ниже:

[_popoverSegue.popoverController setPopoverContentSize:CGSizeMake(320.0f, 460.0f)];

где _popoverSegue — экземпляр UIStoryboardPopoverSegue.

Надеюсь, это поможет будущим посетителям...

(извините, я должен был, вероятно, прокомментировать принятый ответ, но у меня недостаточно репутации...)

person static0886    schedule 03.09.2014