UISegmentedControl sin esquinas redondeadas?

Hay una manera de deshacerse de UISegmentedControl del esquinas redondeadas o es el comportamiento predeterminado?

OriginalEl autor Robert Childan | 2009-12-02

6 Kommentare

  1. 4

    No, no hay ninguna API que le da el control sobre la disposición de los segmentos.

    Probablemente se podría probar a mirar en el UISegmentedControl la vista.subvistas y tratar de cambiar de acuerdo a sus necesidades. Pero a partir de la experiencia personal no lo recomiendo. Si Apple ha cambiado su orden en el futuro, su aplicación probablemente se derrumbará. La cosa más fácil de hacer es crear personalizado UIButtons que se comportan como palanca de control y botones de ellos como una UISegmentedControls (para alternar los botones de ver Cómo utilizar un UIButton como un interruptor de palanca).

    OriginalEl autor Dimitris

  2. 20

    Hay algo realmente fácil que usted puede hacer para deshacerse de la parte redondeada de la basura en el UISegmentedControl … cambiar el estilo a «7». No estoy bromeando. Sólo me di cuenta de esto:

        //Magic number ... (it's cheating, but it works)
      mySegmentedBar.segmentedControlStyle = 7;  

    Este es el mismo estilo de control que utilizan en la UISearchBar ámbito de la barra, como este:

    UISegmentedControl sin esquinas redondeadas?

    Pero si alguien sólo quiere el ámbito de la barra, sin la búsqueda, por lo general, pegado con UISegmentedControl basura como esta (con las esquinas redondeadas):

    UISegmentedControl sin esquinas redondeadas?

    O peor, este…

    UISegmentedControl sin esquinas redondeadas?

    Afortunadamente, cambiando el estilo de la barra «7», se obtiene exactamente el aspecto de la barra de parada, sin todas las subclases y drawRect trucos:

    UISegmentedControl sin esquinas redondeadas?

    Es como magia.
    Es esta consideración de privados de la API?
    ha sido un tiempo, quisiera una respuesta acerca de este ^ por favor, cuando usted tiene el tiempo
    Errr … casi, pero no realmente? No está llamando a cualquiera de los métodos que usted no tiene acceso, pero estamos usando un valor entero que no tiene un conocido públicamente clave. No he oído de nadie (incluido yo mismo) que ha sido sonó para este. Independientemente, de iOS 7 parece que hace de este un punto discutible ya que todo es de todo el texto con los angostos.
    En desuso en iOS 7

    OriginalEl autor Greg Combs

  3. 1

    Mediante la adición de un borde con anchura razonable puede obtener el cuadrado de la mirada:

    self.segmentedControl.tintColor = [UIColor brownColor];
    self.segmentedControl.layer.cornerRadius = 0.0;
    self.segmentedControl.layer.borderColor = [UIColor brownColor].CGColor;
    self.segmentedControl.layer.backgroundColor = [UIColor colorWithWhite:1 alpha:0.75].CGColor;
    self.segmentedControl.layer.borderWidth = 1.5f;
    self.segmentedControl.layer.masksToBounds = YES;

    OriginalEl autor Mantas Laurinavičius

  4. 0

    Después de muchos intentos me metí debajo de solución que funciona bien sin ninguna imagen de fondo o subclases:

        mySegmentedControl.tintColor = [UIColor clearColor]; //Clear all border
    
        //Draw your own border
        mySegmentedControl.layer.borderColor = [UIColor blackColor].CGColor;
        mySegmentedControl.layer.borderWidth = 1.0;
    
        //Set tint color for selected subview
        UIColor *tintcolor=[UIColor redColor];
        int subViewIndex = 0; //index which is selected
        [[_segmentControl.subviews objectAtIndex:subViewIndex] setTintColor:tintcolor]; 

    OriginalEl autor sanjana

  5. 0

    Si alguien está interesado, aquí está la simple extensión en Swift 4 (iOS 11). Asegúrese de establecer el matiz de color antes de llamar a este método. Si usted cambia de matiz de color después, asegúrese de llamar a este método nuevo :

    extension UISegmentedControl {
    
    func ignoreCornerRadius() {
    
        let renderer = UIGraphicsImageRenderer(size: bounds.size)
    
        let normalImage = renderer.image { (context) in
            tintColor.setStroke()
            context.stroke(bounds)
        }
        let selectedImage = renderer.image { (context) in
            tintColor.setFill()
            context.fill(bounds)
        }
    
        setBackgroundImage(normalImage, for: .normal, barMetrics: .default)
        setBackgroundImage(selectedImage, for: .selected, barMetrics: .default)
    
    }

    }

    OriginalEl autor Jovan Stankovic

Kommentieren Sie den Artikel

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

Pruebas en línea