2012-03-15 8 views
5

Possiedo un UIPopoverController con navigationController e un gruppo di sottoview. La dimensione del popover è impostata appena prima che venga mostrata in questo modo:Cambia contenutoSizeForViewInPopover sulla navigazioneController push su iOS

[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)]; 

Ciò funziona correttamente. Il popover è mostrato con le dimensioni corrette. Quando un altro punto di vista è spinto sulla navigazione impilare le dimensioni di un popover è impostato ancora una volta - bisogno di diversa altezza - in modo viewWillAppear:

self.contentSizeForViewInPopover = CGSizeMake(320, 700); 

Questo funziona anche bene. Quando torno a una vista precedente, la dimensione non cambia.

Ho aggiunto la stessa chiamata in viewWillAppear in prima vista ma la vista non viene ridimensionata.

Come posso gestire il ridimensionamento del popover durante la navigazione tra le viste?

risposta

3

Io uso questo hack:

- (CGSize)contentSizeForViewInPopover 
{ 
    return CGSizeMake(320, 200); 
} 

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


- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [self forcePopoverSize]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover; 
    self.contentSizeForViewInPopover = currentSetSizeForPopover; 
} 
+1

http://stackoverflow.com/questions/2752394/popover-with-embedded-navigation-controller-doesnt-respect-size-on-back-nav – Injectios

+0

Sfortunatamente non funziona. –

+1

Questo tipo funziona: http://stackoverflow.com/a/2946864/384864 –

3

Questo è un ingannevole. Ho provato molte cose e finalmente ho funzionato. Potrebbe funzionare anche per te.

Nel mio contentViewController tengo un riferimento a UIPopoverController * genitore;

Questo riferimento viene impostato durante l'inizializzazione di UIPopoverController e del suo contenuto. Questo ovviamente potrebbe non adattarsi direttamente alla gerarchia della vista. Codice in UIViewController che mostra UIPopowerController è qualcosa di simile:

if (self.popoverController == nil) { 
    _contentController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" 
                   bundle:[NSBundle mainBundle]]; 

    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:_contentController]; 
    _contentController.parent = popover; 
    [popover setPopoverContentSize: CGSizeMake(520.0,580.0)]; 

    popover.delegate = self; 

    self.popoverController = popover; 
} 

E quando voglio cambiare dinamicamente la dimensione del contenuto dall'interno contentViewController io uso:

-(void)setNewSize:(CGSize) newSize { 

    [_parent setPopoverContentSize:newSize animated:YES]; 
} 
+0

Non è una buona pratica portare con sé il riferimento. Ancora buona idea ... –

+1

@BorutTomazin: lo so - in realtà è brutto :) ma dopo 8 ore di lavoro ho finalmente trovato una cosa che ha funzionato. Probabilmente cercherò di trovare una soluzione più elegante per questa volta ... probabilmente. Proverò il link che hai postato sopra. –

+1

Sì, lo so. A volte è brutto e funziona meglio che bello e non funziona. :) Fammi sapere se trovi una soluzione migliore. Grazie! –

Problemi correlati