89 votes

Popover avec contrôleur de navigation intégré ne respecte pas la taille sur la navigation arrière

J'ai un UIPopoverController l'hébergement d'un UINavigationController, qui contient une petite hiérarchie de vue des contrôleurs.

J'ai suivi la doc et pour chaque vue-contrôleur, j'ai mis l'affichage de la liste-la taille du contexte de la sorte:

[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];

(taille différente pour chaque contrôleur)

Cela fonctionne comme prévu, comme je l'ai naviguer vers l'avant dans la hiérarchie-- la liste automatiquement anime les changements de taille pour correspondre à la poussée du contrôleur.

Cependant, lorsque je navigue "Retour" à travers le point de vue de la pile via la barre de navigation bouton de Retour, la liste ne change pas de taille, il reste aussi grand que le plus profond de vue atteint. Cela semble cassé pour moi; je m'attends à la liste de respecter les tailles qui sont mis en place comme il apparaît à travers le point de vue de la pile.

Ai-je raté quelque chose?

Merci.

95voto

krasnyk Points 1877

Ok, j'ai été aux prises avec le même problème. Aucune des deux solutions n'a fonctionné pour moi très bien, c'est pourquoi j'ai décidé de faire un peu de recherche et de trouver comment cela fonctionne. C'est ce que j'ai découvert: - Lorsque vous définissez l' contentSizeForViewInPopover dans votre vue-contrôleur, il ne sera pas modifié par la liste elle-même - même si liste de taille peut changer lors de la navigation à l'autre contrôleur. - Lorsque la taille de la liste va changer lors de la navigation vers les différents contrôleur, en remontant, la taille de la liste n'a pas de restauration - Modification de la taille de la liste dans viewWillAppear donne de très étrange animation (quand vous disons que vous popController à l'intérieur de la liste) - je n'avais pas le recommander - Pour moi, le réglage de la codé en dur de la taille à l'intérieur du contrôleur ne fonctionnerait pas du tout mon contrôleurs ont parfois de grandes parfois des petits - contrôleur qui va présenter l'idée à propos de la taille de l'

Une solution pour tous, que la douleur est comme suit: Vous devez réinitialiser la taille de l' currentSetSizeForPopover dans viewDidAppear. Mais vous devez être prudent lorsque vous aurez mis la même taille comme cela a déjà été défini dans le champ currentSetSizeForPopover alors la liste ne changera pas la taille. Pour ce faire, vous pouvez tout d'abord définir le faux taille (qui sera différent de celui qui a été mis en avant) suivie par la mise à la bonne taille. Cette solution fonctionne même si votre contrôleur est imbriquée à l'intérieur de la manette de navigation et la liste va changer sa taille en conséquence, lorsque vous naviguez entre les contrôleurs.

Vous pouvez facilement créer une catégorie sur UIViewController avec la suite de la méthode d'assistance que ferait l'affaire avec réglage de la taille:


- (void) forcePopoverSize {
    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
    CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
    self.contentSizeForViewInPopover = fakeMomentarySize;
    self.contentSizeForViewInPopover = currentSetSizeForPopover;
}

Puis il suffit de l'invoquer en -viewDidAppear de contrôleur désiré.

12voto

adnako Points 458

Il s’agit d’une amélioration par rapport à la réponse de krasnyk.
Votre solution est grande, mais il n’est pas animé en douceur.
Une petite amélioration donne une animation sympa :

Supprimer la dernière ligne de la `` méthode :

Equipez [auto forcePopoverSize] `` méthode :

Et enfin - définir la taille désirée `` méthode :

8voto

AppUs Points 6156

Vous devez définir la taille du contenu nouveau dans `` . En appelant la méthode du délégué dans lequel vous définissez la taille de popovercontroller. J’ai eu aussi le même problème. Mais quand j’ai ajouté à cela le problème résolu.

<strike>Une dernière chose : Si vous utilisez des versions bêta inférieur à 5. Puis les popovers sont plus difficiles à gérer. Ils semblent être plus amicale de version bêta 5. Il est bon que la version finale est sorti. ;)</strike>

J’espère que cela aide.

5voto

SumiSadiq Points 216

Dans la `` de tous les contrôleurs de vue vous utilisez dans la manette de navigation, ajoutez :

3voto

Greg C Points 779

Réinitialiser la taille dans la viewWillDisappear : (BOOL) méthode du contrôleur vue être accédé à partir d’animation :

Puis lorsque la vue cible de la navigation vers s’affiche, j’ai réinitialiser la taille appropriée :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X