Отрегулируйте положение UIPopoverController после изменения размера - PullRequest
5 голосов
/ 08 сентября 2010

У меня есть UIPopoverController, содержащий UITableView. Размер поповера изменяется в функции -viewDidAppear его контроллера представления, чтобы соответствовать содержимому таблицы. В то время как поповер изменяет размеры должным образом, его стрелка, как правило, больше не указывает на оригинал CGRect. Есть ли способ заставить поповер изменить положение после изменения размера так, чтобы его стрелка указывала на намеченную цель?

РЕДАКТИРОВАТЬ: Я не могу установить размер всплывающего окна в -viewDidLoad, поскольку табличное представление не загружает свои данные до вызова -viewDidAppear, и в результате я не знаю, что Размер поповера должен быть до тех пор. Кроме того, я изменяю размер всплывающего окна при нажатии одной из ячеек табличного представления, чтобы отобразить другое представление, и это также приводит к тому, что стрелка больше не указывает на намеченную цель.

Ответы [ 2 ]

6 голосов
/ 08 сентября 2010

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

Я не изменяю размер поповерного контента в viewDidAppear. Я установил свойство contentSizeForViewInPopover в методе контроллера вида viewDidLoad, например ::100100

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView
}

(Быстрое предупреждение: если вы разрабатываете универсальное приложение, этот код вызовет сбой во время выполнения на устройствах под управлением 3.1.x и ниже.)

Вы также можете установить размер контента для контроллера popover перед его представлением, что должно решить вашу проблему. Проверьте popoverContentSize собственность.

3 голосов
/ 15 сентября 2010

Согласно этому ответу , вы можете снова вызвать presentPopoverFromRect:inView: на всплывающей панели, и стрелка изменится. Я не проверял это сам.

...