2010-09-08 5 views
5

J'ai un UIPopoverController contenant un UITableView. Le popover est redimensionné dans la fonction -viewDidAppear de son contrôleur de vue pour s'adapter au contenu de la table. Lorsque le popover est redimensionné correctement, sa flèche ne pointe généralement plus vers l'original CGRect. Existe-t-il un moyen de forcer le survoleur à se repositionner après un redimensionnement afin que sa flèche pointe vers sa cible?Ajuster la position de UIPopoverController après redimensionnement

EDIT: Je ne peux pas définir la taille de la popover dans -viewDidLoad depuis la vue de la table ne charge pas ses données jusqu'à ce que -viewDidAppear est appelé, et par conséquent, je ne sais pas quelle taille la popover devrait être jusque-là . De plus, je redimensionne le popover lorsque l'on clique sur l'une des cellules de vue de la table pour afficher une autre vue, ce qui entraîne également que la flèche ne pointe plus vers sa cible.

+0

Vous pouvez définir la taille du popover avant le chargement de la table. Les deux choses sont totalement séparées. Qu'est-ce que vous faites est de définir la taille du cadre d'encapsulation; Si la taille réelle du contenu de UITableView est plus longue, vous obtiendrez les barres de défilement, comme ce qui se passe lorsque vous chargez une vue de table sur un iPhone et que le contenu est supérieur à 480 pixels. –

+0

@Shaggy Frog: Je veux éviter les barres de défilement lorsque cela est possible. – titaniumdecoy

+0

Encore une fois, vous vous méprenez. Universellement, si le contenu d'un UITableView est plus grand que son cadre, il affichera des barres de défilement. C'est un sujet complètement séparé de ce que vous demandez, qui est d'ajuster le cadre d'une vue popover, que j'ai expliqué comment faire. –

Répondre

6

Je pense que c'est peut-être la mauvaise façon de procéder, puisque vous devez refaire le comportement intégré qui positionne la flèche pour commencer.

Je ne redimensionne pas le contenu popover dans viewDidAppear. Je mets la propriété contentSizeForViewInPopover dans la méthode de contrôleur de vue viewDidLoad, par exemple:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

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

(avertissement rapide: si vous développez une application universelle, ce code provoque un accident d'exécution sur les appareils fonctionnant sous 3.1.x et ci-dessous.)

Vous pouvez également définir la taille du contenu du contrôleur popover avant de le présenter, ce qui devrait résoudre votre problème. Découvrez la propriété popoverContentSize.

+0

Merci, mais cela ne fonctionnera pas dans ma situation; voir ma question mise à jour. – titaniumdecoy

+1

@titaniumdecoy cela va fonctionner, voir ma réponse –

+0

@ shaggy frog popovercontentsize est une bonne idée 'self.popoverController.popoverContentSize = CGSizeMake (320, 300);' fera un travail da.thanks man –

3

Selon this answer, vous pouvez appeler à nouveau le presentPopoverFromRect:inView: sur le popover et il repositionnera la flèche. Je n'ai pas testé cela moi-même.

+2

Ceci est documenté dans Q & R technique QA1694: http://developer.apple.com/iphone/library/qa/qa2010/qa1694.html –

Questions connexes