Cambio de tamaño automático en una barra de navigation de un control segmentado construido dinámicamente

Un controller agrega un UISegmentedControl a una barra de navigation. El control segmentado se agrega a la barra de navigation en el método viewDidLoad del controller, pero los segmentos reales se crean dinámicamente después de viewDidLoad .

No puedo hacer que los segmentos cambien de tamaño automáticamente cuando se muestra la vista. Todos están aplastados, como en esta publicación , aunque la resolución no se aplica aquí. Si los segmentos se agregan antes de agregar el control segmentado al elemento derecho de la barra de navigation (rompiendo la naturaleza dinámica del código), se networkingimensionan automáticamente y se ven bien cuando se muestra la vista.

Aquí hay una versión simplificada 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 

Después de llamar a insertSegmentWithTitle call

[segmentedControl sizeToFit];

Hoy tuve el mismo problema: los segmentos UISegmentedControl se mostraron inicialmente con los anchos de variables adecuados, pero no se expandieron ni se contrajeron para ajustarse a la longitud de los títulos nuevos y dinámicamente actualizados.

Enviar el control segmentado a un post setNeedsLayout después de cada actualización resolvió el problema.

 [segmentedControl setNeedsLayout];