2010-09-08 8 views
5

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

EDIT: Я не могу установить размер пирог в -viewDidLoad, так как таблица не загружает свои данные, пока -viewDidAppear не называется, и в результате я не знаю, какой размер поповер не должно быть до тех пор , Кроме того, я изменяю размер popover, когда нажимается одна из ячеек таблицы, чтобы отобразить другое представление, и это также приводит к тому, что стрелка больше не указывает на ее предполагаемую цель.

+0

Вы можете установить размер popover перед загрузкой таблицы. Две вещи полностью раздельны. То, что вы делаете, - это установка размера инкапсулирующего фрейма; если фактический размер содержимого UITableView больше, вы получите полосы прокрутки, точно так же, как это происходит при загрузке табличного представления на iPhone, а содержимое выше 480 пикселей. –

+0

@Shaggy Frog: Я хочу, чтобы избежать полос прокрутки, когда это возможно. – titaniumdecoy

+0

Опять же, вы неправильно поняли. Если общий контент в UITableView выше его кадра, он будет показывать полосы прокрутки. Это совершенно отдельная тема из того, что вы спрашиваете, которая корректирует рамку просмотра popover, о которой я объяснил, как это сделать. –

ответ

6

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

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

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

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

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

+0

Спасибо, но это не сработает в моей ситуации; см. мой обновленный вопрос. – titaniumdecoy

+1

@titaniumdecoy он будет работать, см. Мой ответ –

+0

@ лохматая лягушка popovercontentsize - хорошая идея 'self.popoverController.popoverContentSize = CGSizeMake (320, 300);' будет выполнять задание.спасибо человеку –

3

В соответствии с this answer, вы можете позвонить по телефону presentPopoverFromRect:inView: и по нему будет удаляться стрелка. Я не проверял это сам.

+2

Это задокументировано в Техническом Q & A QA1694: http://developer.apple.com/iphone/library/qa/qa2010/qa1694.html –

 Смежные вопросы

  • Нет связанных вопросов^_^