UIPopoverController: Pourquoi mon Popover n'apparaît pas où je veux?

Simple: Une vue, je présente un UIPopoverController dans un CGRect en utilisant presentPopoverFromRect … et ni la flèche ni le cadre popover n'apparaissent même près des coordonnées que j'ai demandées dans le rect je suis passé dedans. Des indices? J'ai essayé de comprendre cela par moi-même mais j'abandonne. Voici le code:

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

Qu'est-ce qui se passe ensuite? le popover ne montre pas où il devrait être. Si je passe {0,0}, il apparaît au milieu de l'écran comme si la taille de la vue était (768,512). J'ai vérifié toutes les dimensions de la vue et elles sont toutes ok, frame, bounds, etc … Est-ce que quelqu'un sait ce que je fais mal?

Le CGRect que vous donnez à presentPopoverFromRect est le rect qu'il affichera le popover à côté de (pas dans ). En fonction de l'location du rect, le survol apparaît sur un côté approprié du rect spécifié.

Si vous voulez que le popover apparaisse à un point spécifique, donnez-lui un rectangle avec l'origine comme point et la taille comme 1,1. Ainsi, le CGRectMake dans la ligne presentPopoverFromRect devrait être:

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

Assurez-vous également que le touchPoint est relatif à l'inView (selfview dans votre cas).

En passant, il y a quelques autres erreurs dans le code (probablement juste des fautes de frappe dans la question):

  • setContentController doit être défini sur SetContentViewController
  • popover.ContentSize doit être popover.popoverContentSize
  • myPopverSize.height devrait être myPopoverSize.height (mais ceci sera remplacé par 1)

Dans mon cas, la raison de ce problème était la suivante. Il est également possible que votre vue soit une tableView. Ainsi, lorsque vous le faites défiler et essayez d'afficher UIPopover dans un rect dans ce tableauView, il peut ne pas être affiché. J'ai utilisé ceci:

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