2011-08-31 17 views
6

Un controlador agrega un UISegmentedControl a una barra de navegación. El control segmentado se agrega a la barra de navegación en el método viewDidLoad del controlador, pero los segmentos reales se crean dinámicamente después de llamar al viewDidLoad.Cambio de tamaño automático en una barra de navegación de un control segmentado construido dinámicamente

No puedo hacer que los segmentos se redimensionen automáticamente cuando se muestra la vista. Todos están aplastados, like in this post, aunque la resolución no se aplica aquí. Si los segmentos se agregan antes de que el control segmentado se agregue al ítem correcto de la barra de navegación (rompiendo la naturaleza dinámica del código), se cambian de tamaño automáticamente y se ven bien cuando se muestra la vista.

Aquí hay una versión reducida de mi código, a continuación. ¿Qué me estoy perdiendo?

@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 

Respuesta

14

Después de llamar a la llamada insertSegmentWithTitle

[segmentedControl sizeToFit];

+0

Hola @Krystsztof, lo intenté pero no funcionó tristemente. – ptrico

+1

¡Trabajó para nosotros, gracias! –

1

tuve el mismo problema hoy en día - los segmentos UISegmentedControl se muestran inicialmente con las anchuras variables adecuadas, pero no se expanden o contraen para adaptarse a la longitud de nuevos títulos actualizados dinámicamente.

Enviando el control segmentado un mensaje setNeedsLayout después de cada actualización resuelve el problema.

[segmentedControl setNeedsLayout]; 
+0

Hola @fedonev, gracias por responder esta vieja pregunta. Aceptaré tu respuesta, aunque no la he probado yo mismo. Creo que terminé calculando y estableciendo el ancho de cada segmento programáticamente. Tu solución suena más simple. – ptrico

+0

sizeToFit hace el trabajo, y en los casos donde los títulos de los segmentos han sido cambiados. – Jeff

Cuestiones relacionadas