¿Usar control segmentado de estilo iOS 6 en iOS 7?

¿Es posible tener un control segmentado en un dispositivo iOS 7 como la versión iOS 6 del control?

Realmente no estamos listos para un networkingiseño de la interfaz y el nuevo control plano no cambia con el rest de nuestra interfaz de usuario. Definitivamente sería mejor mantener el estilo de iOS 6 por ahora, si es posible.

Para aclarar, estoy comstackndo usando el iOS 6.1 Base SDK. Soy consciente de que esta es la respuesta "obvia" a mi pregunta, pero no funciona. La mayoría de los demás elementos de interfaz de usuario aparecerán con el estilo de iOS 6 al hacer esto, pero al igual que UIAlertView y UIActionSheet , UISegmentedControl no. Sin embargo, a diferencia de UIAlertView y UIActionSheet , UISegmentedControls no se siente como un elemento de "sistema"; deberían poder mostrarse en el modo iOS 6.

Edición: pensé que sería útil que finalmente incluya una image con esto (probablemente debería haber hecho esto desde el principio). Sin embargo, la respuesta que proporcioné solucionó el problema. Además, en retrospectiva, parece que este podría ser el estilo de iOS 6 después de todo, simplemente se muestra tan mal que parece ser el estilo de iOS 7.

introduzca la descripción de la imagen aquí

Logro hacer un muy buen trabajo al resolver este problema configurando todos los attributes manualmente, pero no es del todo perfecto.

Esto es lo que terminé haciendo:

 - (void)fixSegmentedControlForiOS7 { NSInteger deviceVersion = [[UIDevice currentDevice] systemVersion].integerValue; if(deviceVersion < 7) // If this is not an iOS 7 device, we do not need to perform these customizations. return; NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont boldSystemFontOfSize:12], UITextAttributeFont, [UIColor whiteColor], UITextAttributeTextColor, nil]; [self.segmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal]; NSDictionary *highlightedAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor]; [self.segmentedControl setTitleTextAttributes:highlightedAttributes forState:UIControlStateHighlighted]; self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; self.segmentedControl.tintColor = [UIColor colorWithRed:49.0 / 256.0 green:148.0 / 256.0 blue:208.0 / 256.0 alpha:1]; } 

Para corregir las imágenes asignadas con InterfaceBuilder, use este código:

 - (void)fixImagesOfSegmentedControlForiOS7 { NSInteger deviceVersion = [[UIDevice currentDevice] systemVersion].integerValue; if(deviceVersion < 7) // If this is not an iOS 7 device, we do not need to perform these customizations. return; for(int i=0;i<toSegmentedControl.numberOfSegments;i++) { UIImage* img = [toSegmentedControl imageForSegmentAtIndex:i]; UIImage* goodImg = [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; // clone image with different rendering mode [toSegmentedControl setImage:goodImg forSegmentAtIndex:i]; } } 

Me encontré con este problema hoy mismo. La aplicación que estoy trabajando en la actualización es bastante antigua y todavía usa files xib, así que no sé si esto funciona en storyboards o no. Como otros sugeridos anteriormente, aún necesita utilizar el SDK de iOS 6.1, pero esto solo no es suficiente. Después de realizar los siguientes pasos, pude recuperar la antigua apariencia UISegmentedControl :

  1. Abra el documento del generador de interfaces en cuestión.
  2. Vaya al inspector de files (primera pestaña del inspector; tiene un ícono de documento)
  3. En la sección "Documento del generador de interfaces", cambie "Abre en" a Xcode 4.6

Creo que esto es un error, y no me sorprendería si no hay una solución para UISegmentedControl instancias UISegmentedControl creadas en el código. Supongo que esto está algo relacionado con la desaprobación de la propiedad segmentedControlStyle en iOS 7 (consulte https://developer.apple.com/library/ios/documentation/uikit/reference/UISegmentedControl_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#// apple_ref / occ / instp / UISegmentedControl / segmentedControlStyle ).

Espero que esto ayude a alguien.

Si guarda el file iPhoneOS6.1.sdk de la versión anterior de XCode y lo agrega a Xcode 5 en la misma ruta, puede crear una aplicación contra el SDK 6.1 para que cuando se ejecute en 7 todo sea como 6. Vinculación contra iOS7 SDK le dice a iOS que haga que todo se parezca a iOS7 si es posible. Esencialmente, usted tiene una aplicación para iOS6 pero la construye con XCode 5.

Si utiliza imágenes en cualquiera de sus segmentos UISegmentedControl, necesitará agregar un código para configurarlos correctamente en iOS 7, de lo contrario, se usarán como una image de plantilla y el segmento seleccionado será un recorte del background del segmento.

UISegmentedControl bajo iOS 7 interpreta sus imágenes como en modo de representación UIImageRenderingModeAlwaysTemplate a less que se especifique lo contrario. Tuve que usar – [UIImage imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] en la image de cada segmento para iOS 7 para lograr el comportamiento anterior.

O bien podrías:

  • No actualice su aplicación para iOS7 hasta que esté listo para realizar algunos cambios en la interfaz de usuario. Las aplicaciones comstackdas contra el SDK de iOS6 se ejecutarán en el modo de compatibilidad de iOS6 en iOS7 y se verán exactamente igual que en iOS6.
  • Aplica imágenes personalizadas de background, separador, etc. a tus controles segmentados que imitan el aspecto que tenían en iOS6.

¿Es posible? Realmente no…

Puede hacer su propio control segmentado personalizado.

O puede utilizar el proxy UIAppearance para personalizar su control segmentado con imágenes, pero luego es su responsabilidad hacer que se vea como en iOS 6.

Sí, es posible si recrea el control por su count. Cree un control segmentado falso que se vea y funcione como uno.

En mi aplicación, he establecido el control Segmentado en el estilo "Bar". Se muestra en estilo ios6 en mi ios7 iphone5 (whoa, 5,6,7). Sin embargo, el text dentro de los segmentos se corta y tiene los tres puntos "…" agregados, sin importar cuán amplia sea la vista. Entonces, la renderización del control segmentado ios6 en ios7 parece realmente cochambrosa