Saltar al contenido

Cómo eliminar el borde del control segmentado

Verificamos profundamente cada secciones de nuestra web con el objetivo de enseñarte en todo momento información más veraz y actual.

Solución:

Lo que debes entender es el backgroundColor la propiedad no tiene estado. Por lo tanto, tienes que usar setBackgroundImage(_:for:barMetrics:).

Podemos eliminar fácilmente tanto los bordes como los divisores usando la siguiente función.

Para Swift 3 y 4+:

extension UISegmentedControl 
    func removeBorders() 
        setBackgroundImage(imageWithColor(color: backgroundColor ?? .clear), for: .normal, barMetrics: .default)
        setBackgroundImage(imageWithColor(color: tintColor!), for: .selected, barMetrics: .default)
        setDividerImage(imageWithColor(color: UIColor.clear), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
    

    // create a 1x1 image with this color
    private func imageWithColor(color: UIColor) -> UIImage 
        let rect = CGRect(x: 0.0, y: 0.0, width:  1.0, height: 1.0)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()
        context!.setFillColor(color.cgColor);
        context!.fill(rect);
        let image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image!
    


Para Swift 2.2:

extension UISegmentedControl 
    func removeBorders() 
        setBackgroundImage(imageWithColor(backgroundColor!), forState: .Normal, barMetrics: .Default)
        setBackgroundImage(imageWithColor(tintColor!), forState: .Selected, barMetrics: .Default)
        setDividerImage(imageWithColor(UIColor.clearColor()), forLeftSegmentState: .Normal, rightSegmentState: .Normal, barMetrics: .Default)
    

    // create a 1x1 image with this color
    private func imageWithColor(color: UIColor) -> UIImage 
        let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()
        CGContextSetFillColorWithColor(context, color.CGColor);
        CGContextFillRect(context, rect);
        let image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image
    

Llame a la función anterior.

segmentedControl.removeBorders()

Referencia: elimine completamente los separadores de UISegmentedControl. (iPhone)

Gracias a https://stackoverflow.com/users/3921490/amagain por la versión Swift 3.

Aquí está la versión rápida 3 de la respuesta de Sohil que podría ayudar a alguien más. Me ayudó. 🙂

extension UISegmentedControl 
func removeBorders() 
    setBackgroundImage(imageWithColor(color: backgroundColor!), for: .normal, barMetrics: .default)
    setBackgroundImage(imageWithColor(color: tintColor!), for: .selected, barMetrics: .default)
    setDividerImage(imageWithColor(color: UIColor.clear), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)


// create a 1x1 image with this color
private func imageWithColor(color: UIColor) -> UIImage 
    let rect = CGRect(x: 0.0, y: 0.0, width:  1.0, height: 1.0)
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()
    context!.setFillColor(color.cgColor);
    context!.fill(rect);
    let image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image!
    

Espero que ayude a alguien

rápido – 4

Haga que el color de fondo y el color de tinte de su control de segmento sean del mismo color. Luego “establezca titleTextAttributes” de su control Segmento

    segmentedControl.tintColor = UIColor.red
    segmentedControl.backgroundColor = UIColor.red
    let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    segmentedControl.setTitleTextAttributes(attributes, for: .normal)
    segmentedControl.setTitleTextAttributes(attributes, for: .selected)

Al final de todo puedes encontrar los comentarios de otros gestores de proyectos, tú también eres capaz dejar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *