2011-08-31 4 views
6

Un controller aggiunge uno UISegmentedControl a una barra di spostamento. Il controllo segmentato viene aggiunto alla barra di navigazione nel metodo viewDidLoad del controller, ma i segmenti effettivi vengono creati dinamicamente dopo la chiamata a viewDidLoad.Ridimensionamento automatico in una barra di navigazione di un controllo segmentato costruito dinamicamente

Non riesco a ridimensionare automaticamente i segmenti quando viene visualizzata la vista. Sono tutti schiacciati, like in this post, anche se la risoluzione non si applica qui. Se i segmenti vengono aggiunti prima che il controllo segmentato venga aggiunto all'elemento giusto della barra di spostamento (interrompendo la natura dinamica del codice), vengono ridimensionati automaticamente e appaiono corretti quando viene visualizzata la vista.

Ecco una versione ridotta del mio codice, di seguito. Cosa mi manca?

@implementation MyController  

- (void)viewDidLoad { 

    // segmentedControl is an ivar 
    segmentedControl = [UISegmentedControl alloc] initWithItems:[NSArray array]]; 
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl] autorelease]; 
    self.navigationController.navigationBar.topItem.rightBarButtonItem = barButtonItem; 

} 

- (void)someMethodCalledAfterViewDidLoad { 

    [segmentedControl insertSegmentWithTitle:@"a title" 
            atIndex:0 
            animated:NO]; 
} 

@end 

risposta

14

Dopo aver chiamato insertSegmentWithTitle chiamata

[segmentedControl sizeToFit];

+0

Ciao @Krystsztof, l'ho provato ma non ha funzionato purtroppo. – ptrico

+1

Ha lavorato per noi, grazie !!! –

1

Ho avuto lo stesso problema di oggi - i segmenti UISegmentedControl sono stati inizialmente visualizzati con le dovute larghezze variabili, ma non espandersi o contrarsi per adattarsi alla lunghezza del nuovi titoli aggiornati dinamicamente.

L'invio del controllo segmentato un messaggio setNeedsLayout dopo ogni aggiornamento ha risolto il problema.

[segmentedControl setNeedsLayout]; 
+0

Ciao @fedonev, grazie per aver risposto a questa vecchia domanda. Accetterò la tua risposta anche se non l'ho ancora testata. Penso di aver finito per calcolare e impostare la larghezza su ogni segmento a livello di programmazione. La tua soluzione sembra più semplice. – ptrico

+0

sizeToFit esegue il lavoro e nei casi in cui i titoli dei segmenti sono stati modificati. – Jeff