UIPopoverController: Почему мой поповер не появляется там, где я хочу? - PullRequest
5 голосов
/ 27 марта 2011

Простой: Представление, я представляю UIPopoverController в CGRect, используя presentPopoverFromRect ... и ни стрелка, ни рамка всплывающего окна не появляются даже рядом с координатами, которые я запрашивал в прямоугольнике, в который я прошел. Есть какие-нибудь подсказки? Я пытался выяснить это сам, но сдаюсь. Вот код:

if(!myContentController){
    myContentController = [[MyContentController alloc] initWithNibName:myNibName bundle:[NSBundle mainBundle]];
    // This works pretty well. actually when i show the popover
    // i see everything inside as it's supposed to.
}
if(!popover){
   popover = [[UIPopoverController alloc] initWithContentViewController:myContentController];
}
else{
    [popover setContentController:myContentController];
}
popover.delegate = self;
CGPoint touchPointInView = [self touchPoint];//This is working fine too.I've been checking with NSLog.
popover.ContentSize = myPopoverSize;//In this case {320,480}
 [popover presentPopoverFromRect:CGRectMake(touchPoint.x,touchPoint.y,myPopoverSize.width,myPopverSize.height)
                          inView:self.view
        permittedArrowDirections:UIPopoverArrowDirectionAny
                        animated:YES];

Что будет дальше? поповер не показывает, где он должен быть. Если я передаю {0,0}, он отображается в середине экрана, как если бы размер представления был (768,512). Я проверил все размеры вида, и все они в порядке: рамка, границы и т. Д. Кто-нибудь знает, что я делаю не так?

Ответы [ 2 ]

14 голосов
/ 05 апреля 2011

CGRect, который вы даете для presentPopoverFromRect, является прямоугольником, в котором будет отображаться всплывающее окно далее до (не в ). В зависимости от расположения прямоугольника всплывающее окно появится на соответствующей стороне указанного прямоугольника.

Если вы хотите, чтобы всплывающее окно появлялось в определенной точке, задайте ему прямоугольник с началом координат в качестве точки и размером 1,1. Поэтому CGRectMake в строке presentPopoverFromRect должен быть:

CGRectMake(touchPoint.x,touchPoint.y,1,1)

Также убедитесь, что TouchPoint относительно inView (self.view в вашем случае).


Кстати, в коде есть несколько других ошибок (вероятно, только опечатки в вопросе):

  • setContentController должен иметь значение setContentViewController
  • popover.ContentSize должен быть popover.popoverContentSize
  • myPopverSize.height должен быть myPopoverSize.height (но он будет заменен на 1)
1 голос
/ 27 января 2013

В моем случае причина этой проблемы была следующая.Также возможно, что ваше представление является табличным представлением.Поэтому, когда вы прокручиваете его и пытаетесь показать UIPopover в прямоугольнике в этом табличном представлении, оно может не отображаться.Я использовал это:

[_popoverController presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
...