Comportement bizarre avec UISegmentedControl et UIAppearance

Je définis l'apparence du contrôle segmenté via ces instructions dans le délégué de l'application.

[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateNormal barMesortingcs:UIBarMesortingcsDefault]; [[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateSelected barMesortingcs:UIBarMesortingcsDefault]; [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalNormal.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMesortingcs:UIBarMesortingcsDefault]; [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalSelected.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMesortingcs:UIBarMesortingcsDefault]; [[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_SelectedNormal.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMesortingcs:UIBarMesortingcsDefault]; 

Le résultat est bon. Les arrière-plans et les séparateurs sont définis correctement lorsque je sélectionne l'un des segments (le segment Ordre est sélectionné par défaut lors du premier lancement de l'application). Lorsque je sélectionne le segment Release, comme vous pouvez le voir ci-dessous, tout va bien.

entrez la description de l'image ici

Le problème est lorsque je sors de la vue puis de nouveau à la vue (je stocke l'index sélectionné et le place dans viewDidLoad pour resélectionner le segment), le diviseur est mal défini pour une raison inconnue.

entrez la description de l'image ici

Si je tape sur AZ puis sur Libérer, il se corrige lui-même. Ce bogue se produit uniquement lorsque la vue est chargée et que le segment sélectionné est soit Release, soit AZ. Le diviseur a toujours l'air bien lorsque Order est sélectionné et la vue se charge.

Taille de l'image: le séparateur a une largeur de 2 pixels (les 3 images ont la même taille), les arrière-plans ont une largeur de 2 pixels chacun.

Toutes les idées ou les conseils seraient très appréciés, je me suis tiré les cheveux au cours des 10 dernières heures en essayant de find une solution à aucun disponible.

C'est un bug avec UISegmentedControl, je pense. Vous pouvez contourner ce problème en définissant le segment sélectionné après un timeout, afin de permettre au time de contrôle de se dessiner. Vous n'avez même pas à utiliser un timeout réel, juste quelque chose comme:

 [self performSelector:@selector(setPreferences) withObject:nil afterDelay:0.0]; 

setPreferences met à jour la valeur de votre contrôle segmenté.