Me gustaría modificar UISegmentedControl con una subclase para quitar las esquinas redondeadas. Me parece que no puede establecer la cornerRadius. Hacer el SegmentedControl más amplio que el de la pantalla (y por consiguiente de «picar» fuera de las esquinas) no es una opción ya que tengo 4 o 5 segmentos y que sería entonces varían en tamaño.

Hay una manera de hacer esto?

Gracias

InformationsquelleAutor Joseph | 2011-10-12

5 Comentarios

  1. 9

    Usted puede configurar el ancho de los segmentos (utilizando setWidth:forSegmentAtIndex:) así que usted puede hacer fácilmente la izquierda y a la derecha final de los segmentos de mayor (es decir 10px mayor) que el de otros y, a continuación, puede recortar 10px desde cualquiera de los extremos y tiene las esquinas del cuadrado. Usted no tiene que hacer más grande que el ancho de la pantalla, en lugar de poner en el interior de una UIView y lo utilizan para recortar los extremos.

    El otro lado sólo podría hacer tu propia segmentado de control mediante un conjunto de personalizado UIButtons dentro de un UIControl.

    • decidimos ir con la 10px versión, ya que no tienen exceso de segmentos y los índices.
    • 2 preguntas: 1) ¿cómo se usa un UIView para recortar los extremos. 2) ¿cómo ir sobre la fabricación de su propio segmentado control mediante UIButtons dentro de un UIControl.
    • 1) hacer que el control sea más amplio que el de los padres de la vista, establecer clipsToBounds en la vista principal, 2) crear una subclase de UIControl que contiene una matriz de UIButtons e implementar los métodos de UISegmentedControl (sólo los que necesita) utilizando los botones para hacer que tu subclase se comportan como un UISegmentedControl excepto para las esquinas redondeadas.
  2. 35

    Para hacer la esquina de la plaza utilice el siguiente código:

    segmentContrl.layer.borderColor=*anycolor*.CGColor;
    segmentContrl.layer.cornerRadius = 0.0;
    segmentContrl.layer.borderWidth = 1.5f;
    • esto funcionó para mis propósitos, pero no tenía necesidad de los cornerRadius parte.
    • Luego ignorar cornerRadius.
    • Este es el único no-hack.
    • la mejor solución , gracias compañero .
    • Bueno, esto es el total de hack así…
    • no es trabajo para mí

  3. 15

    Una alternativa, si el «recorte» de parte de el primer y el último segmento es problemático, se puede recortar todo el primer y el último segmento (el que haya hecho ficticio los segmentos no utilizados). De esa manera usted todavía puede mantener un tamaño común para cada segmento.

    • simplemente elegante. La ventaja de esto, es que visualmente todavía tienen las líneas verticales en el borde.
    • Bueno! En el diseño de subvistas puedo tomar el ancho de la segmentación de control, obtener el ancho de un segmento dividiendo el número de segmentos, se establece la anchura de la máscara de vista (num segmentos – 2) * ancho + 2 (a la izquierda del borde derecho) y estoy de oro!
  4. 11

    Sólo utilizar el construido en los métodos de personalización y establecer una imagen de fondo para cada segmento de estado. Esto anulará la frontera completo. Si las imágenes de fondo son cuadrados, entonces su segmentado de control aparecerá cuadrado. Utilice el siguiente código para cada segmento de estado que desea personalizar.

    [segmentedControl setBackgroundImage:[UIImage imageNamed:@"square-background-image-selected"]
    forState:UIControlStateSelected
    barMetrics:UIBarMetricsDefault];

    • Usted puede ser que necesite para proporcionar una imagen de fondo para el normal estado de control como bien lo contrario, la imagen de fondo seleccionada estado de control no se aplica
  5. 5

    Otra alternativa para lograr esto en el interface builder:

    Arrastre un UIView objeto a su UIViewController, esto puede ser una subvista de su UIView.

    Arrastre un UISegmentedControl como una subvista de su UIView. La segmentación de control debe ser ahora la sangría en su lista de UIViewController objetos. (ver imagen abajo).

    Cambiar el tamaño de la SegementedControl por lo que su marco está fuera de los límites de su UIView objeto. En mi caso me puse el marco de la SegementedControl a X = -10 y agregó +20 a la anchura de la SegementedControl de modo que la anchura total de la segmentación de control porque el 20 mayor que el UIView objeto. (es de esperar, la captura de pantalla a continuación ayuda).

    Yo también ajustar la siguiente configuración para el UIView objeto y SegmentedControl:
    UIView: verificación de Clip de Subvistas, desactive AutoResize Subvistas.
    SegementedControl: desactive Clip de Subvistas, desactive AutoResize Subvistas.

    UISegmentedControl con esquinas cuadradas

    • Esta solución es limpio y sencillo y funciona muy bien para el caso de que usted tiene exactamente dos segmentos de igual tamaño.
    • Solución muy sencilla, y también funciona si se ha creado mediante programación – por lo bien hecho en la idea genial!
    • gracias @JackSolomon que es muy agradable.

Dejar respuesta

Please enter your comment!
Please enter your name here