Swift: cómo eliminar el borde del control segmentado

¿Cómo elimino el borde exterior de un control segmentado en xcode? He configurado la image divisoria para lo que quería, pero ahora para seguir el simulacro de mi aplicación, necesito tener un control segmentado sin el borde exterior.

Puede eliminar ambos bordes y divisores usando la function a continuación. Crear la extensión UISegmentedControl:

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 } } 

Para Swift 3:

 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! } } 

Llama a la function anterior.

 segmentedControl.removeBorders() 

Referencia: elimine por completo los separadores UISegmentedControl. (iphone)

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

Aquí está la rápida versión 3 de la respuesta de Sohil que podría ayudar a otra persona. 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! } } 

Si desea save bordes entre celdas

 extension UISegmentedControl { func removeBorders() { if let backgroundColor = backgroundColor, let backgroundImage = UIImage.imageWithSize(size: CGSize.one_one, color: backgroundColor){ setBackgroundImage(backgroundImage, for: .normal, barMetrics: .default) } if let tintColor = tintColor, let tintImage = UIImage.imageWithSize(size: CGSize.one_one, color: tintColor){ setBackgroundImage(tintImage, for: .selected, barMetrics: .default) setDividerImage(tintImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default) } } } extension CGSize{ static var one_one: CGSize{ return CGSize(width: 1.0, height: 1.0) } } extension UIImage{ static func imageWithSize(size : CGSize, color : UIColor = UIColor.white) -> UIImage? { var image:UIImage? = nil UIGraphicsBeginImageContext(size) if let context = UIGraphicsGetCurrentContext() { context.setFillColor(color.cgColor) context.addRect(CGRect(origin: CGPoint.zero, size: size)); context.drawPath(using: .fill) image = UIGraphicsGetImageFromCurrentImageContext(); } UIGraphicsEndImageContext() return image } }