El uso de iOS 6 Estilo Segmentado de Control en iOS 7?

Es posible tener un sistema segmentado de control en un dispositivo de iOS 7 se muestran como el iOS 6, la versión de el control?

Que realmente no están preparados para un rediseño de la interfaz y el nuevo plano de control no concuerdan con el resto de nuestra interfaz de usuario. Que definitivamente sería mejor mantener el estilo de iOS 6 por ahora, si es posible.

Para aclarar, yo soy de la compilación usando el iOS 6.1 SDK Base. Soy consciente de que este es el «obvio» que la respuesta a mi pregunta, pero no funciona. La mayoría de los otros elementos de la interfaz se mostrará con el iOS 6 estilo haciendo de este, pero como el UIAlertView y UIActionSheet, el UISegmentedControl no. Sin embargo, a diferencia de la UIAlertView y UIActionSheet, UISegmentedControls no se siente como un «sistema» elemento; deben ser capaces de mostrar en iOS 6 modo.

Edit: pensé que sería útil si finalmente he incluido una imagen con este (probablemente debería haber hecho esto desde el principio). Sin embargo, la respuesta que siempre hizo solucionar el problema. También, en retrospectiva, parece que este podría ser el iOS 6 de estilo después de todo, es sólo mostrar tan mal que aparece como estilo de iOS 7.

El uso de iOS 6 Estilo Segmentado de Control en iOS 7?

No puede compilar con iOS 6 SDK?
Usted podría pensar así, pero que no funciona… Esto NO arreglar otros iOS 7 UI tipo de cuestiones, pero no la segmentación de control. Ni idea de por qué no funciona.
Suena como un error. Usted debe obtener el iOS 6 aparición en casi todo—alerta vistas son una excepción, pero segmentado controles no deberían estar. bugreport.apple.com
Usted podría estar en lo correcto. Voy a seguir adelante y reportarlo como bug. Definitivamente parece un elemento de interfaz de usuario que deberá mantener su estilo de iOS 6.

OriginalEl autor MikeS | 2013-09-19

9 Kommentare

  1. 20

    Me las arreglo para hacer un buen trabajo de resolver este problema mediante el establecimiento de todos los atributos manualmente, pero no es del todo perfecto.

    Esto es lo que acabé 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];
    }
    Que es oficialmente brillante. Mi segmentado controlador parece a iOS6 ahora.
    Jaja gracias. He actualizado mi post original para incluir una foto del problema que estaba teniendo sólo para referencia….
    Estaba buscando el otro día y no podía llegar a trabajar. Encontré esto hoy y «wham bam gracias señora». Funciona como un encanto.
    Esta es una solución para los atributos desapareciendo con ciertas 6.x Sdk. En el SDK de 7, lo que sucede es que el azul es un poco diferente de la sombra.
    Que (aunque bonito, no soluciona el problema! Usted acaba de conseguir un (mejor) segmentedControl, pero nada como la (bella) iOS6 segmentedControl con su agradable gris y el azul de las imágenes. Al menos hay una manera de cambiar el -no seleccionados – segmentos de fondo de otro color (como el gris de iOS6)?

    OriginalEl autor MikeS

  2. 13

    Para corregir imágenes asignado con InterfaceBuilder utilizar 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];
        }
    }
    Bonito fix… funciona como un encanto. También se utiliza esta opción para cambiar el tamaño de nuestro segmentado de control
    Podría usted por favor, comparta su código de cómo se logró para cambiar el tamaño del segmento de control? Cuando yo intente esto en - (void)viewDidLoad no cambia nada. Traté de hacerlo también en initWithNibName sin suerte.
    El nuevo segmentado de control tiene una altura reducida. Yo no fijar la altura, aunque esto podría ser posible. Como una solución permanente que sustituye el control completamente con bootstrap botones github.com/katzlbt/iOSBootstrapButton
    Esto sólo elimina las etiquetas de texto en XCode 5/SDK 7.

    OriginalEl autor cat

  3. 5

    Me encontré con este problema hoy mismo. La aplicación que estoy trabajando en la actualización es bastante antiguo, y todavía se utiliza xib archivos, así que no sé si esto funciona en los guiones gráficos o no. Como los demás se sugirió anteriormente, usted todavía tiene que usar el SDK de iOS 6.1, pero esto solo no es suficiente. Después de realizar los pasos siguientes, yo era capaz de llegar a la edad UISegmentedControl apariencia de espalda:

    1. Abrir la interfaz de generador documento en cuestión
    2. Ir al inspector de archivo (primer inspector de la ficha; tiene un icono de documento)
    3. Bajo el «Generador de Interfaz de Documento» en la sección de cambio «se Abre» a Xcode 4.6

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

    La esperanza de que esto ayude a alguien por ahí.

    Esta es la mejor solución para mantener la interfaz de usuario de iOS 6 en iOS 7!

    OriginalEl autor ianthetechie

  4. 2

    Si guarda el iPhoneOS6.1.sdk de archivo de la anterior versión de XCode y agregar a Xcode 5 en la misma ruta que se puede construir una aplicación contra la 6.1 SDK, de modo que cuando se ejecuta en 7 todo es como de 6. La vinculación con iOS7 SDK le dice a iOS para hacer que todo parezca como iOS7, si es posible. Esencialmente, entonces usted tiene una iOS6 aplicación, pero con la construcción de XCode 5.

    OriginalEl autor ahwulf

  5. 2

    Si el uso de imágenes en cualquiera de sus UISegmentedControl segmentos, tendrás que añadir un poco de código para establecer esos correctamente en iOS 7, de lo contrario va a ser utilizado como una imagen de la plantilla y el segmento seleccionado será un recorte del segmento del fondo.

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

    este todavía no resolver el problema.. no sé por qué.. ‘

    OriginalEl autor Ryan

  6. 0

    Ya sea que usted podría:

    • No actualización de su aplicación para iOS7 hasta que estés listo para hacer algunos cambios de interfaz de usuario. Las aplicaciones compiladas para el iOS6 SDK se ejecutará en iOS6 modo de Compatibilidad en iOS7 y se verá exactamente igual a como lo hicieron en iOS6.
    • Aplicar fondo personalizado, separador, etc imágenes a su segmentado controles que imitan la apariencia que tenían en iOS6.
    Vea los comentarios sobre la cuestión—al parecer, la segmentación de control es una excepción a la del modo de compatibilidad cosa. Imágenes personalizadas, puede ser la única solución por ahora.
    Sí, soy compilar para iOS 6, pero por la razón que sea, el UISegmentedControl todavía se muestra en el estilo de iOS 7.

    OriginalEl autor Jonathan Arbogast

  7. 0

    Es posible? En realidad no…

    Usted podría hacer sus propias segmentado de control.

    O puede utilizar la UIAppearance proxy para personalizar su segmentado de control con las imágenes, pero entonces es su responsabilidad hacer que se vea como fue en iOS 6.

    Esto es sólo una especulación, a continuación, supongo, pero clasificaría usted esto como un error o una función? A mi conocimiento, todos los no-sistema de elementos de interfaz de usuario puede ser mostrado en iOS 6, el modo, donde el UISegmentedControl parece que no puede ser… Parece extraño.
    Es la manera que es. Estándar de interfaz de usuario aparecen elementos como son la intención de Apple en cada versión del sistema. Tan pronto como se compila la aplicación con Xcode 5, entonces los elementos del sistema se convierten en cualquiera de iOS 7 o 6 dependiendo del sistema que se ejecuta en. Con Xcode 4, usted puede compilar con iOS 6 y SDK instalar en un dispositivo de iOS 7, el estándar de elementos de interfaz de usuario se mantendrá igual en 6. Pero Apple pronto se niegan las aplicaciones que se envían con las viejas versiones de Xcode, como siempre lo hacen.
    Usted puede compilar aplicaciones con iOS 6.1 SDK Base en Xcode 5 así, sin embargo. Sólo tienes que seguir estas instrucciones: stackoverflow.com/questions/18423896/…. Lo que me estoy quejando es que UISegmentedControl no se muestra correctamente en iOS 7, incluso cuando se compila con el iOS 6.1 SDK Base. Sin embargo, todos los otros elementos de la interfaz de la pantalla muy bien.
    Tal vez, a continuación, poner algún tipo de captura de pantalla de por qué no aparecen bien para usted.

    OriginalEl autor Daniel

  8. 0

    Sí, es posible si se vuelve a crear el control de su propio. Crear un falso segmentado de control que se parece y funciona como uno.

    OriginalEl autor SpaceDog

  9. 0

    En mi app, he puesto la segmentación de control del «Bar» de estilo. Se hace en ios6 estilo en mi ios7 iphone5 (whoa, 5,6,7). Sin embargo, el texto dentro de los segmentos que se cortan y tienen los tres puntos «…», agregó, no importa el ancho de la vista.
    Así que el ios6 segmentado de control de representación en ios7 parece realmente buggy

    Creo que este fue el tema a lo largo de todos: era tan buggy/descolorida, pensé que era el 7 de control de…
    Tengo varios «de la barra de» segmentar los controles en nuestra aplicación, y tenemos el mismo problema: los colores están bien, pero las etiquetas se trunca como D… para el Día y la L… para la Lista aunque hay un montón de ancho en el segmento. Han tratado de reasignar el texto cada vez que cambia la selección, pero eso no lo soluciona.

    OriginalEl autor user1169629

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea