How to remove a border from a UISegmentController?

I want to remove the border of the UISegmentController. If possible. otherwise change it in a custom border color.

Screenshot

+6
source share
2 answers

To change the color and text of a segmented control, try the following:

Objective-c

NSArray *array = [segmentedControl subviews]; [[array objectAtIndex:2] setTintColor:[UIColor redColor]]; [[array objectAtIndex:1] setTintColor:[UIColor greenColor]]; [[array objectAtIndex:0] setTintColor:[UIColor blueColor]]; 

Swift

 let array = segmentedControl.subviews array[2].tintColor = UIColor.redColor() array[1].tintColor = UIColor.greenColor() array[0].tintColor = UIColor.blueColor() 

Note that subviews are in reverse order with respect to the user interface.

You can customize the border in the same way:

 let array = segmentedControl.subviews array[0].layer.borderWidth = 5 // change thickness of border array[0].layer.cornerRadius = 4 //change corner radius 
+3
source

Update

Case 1 - Setting borderColor of each element in a segmented controller

code

 extension UIView { ///Add border color with corners func addBorderWithColor(color: UIColor, roundingCorners: UIRectCorner) { self.layer.borderWidth = 1 self.layer.borderColor = color.CGColor self.addRoundingCorners(roundingCorners) } ///Use corner radius depending on UIRectCorner private func addRoundingCorners(roundingCorners: UIRectCorner) { let path = UIBezierPath(roundedRect:self.bounds, byRoundingCorners:roundingCorners, cornerRadii: CGSizeMake(4, 4)) let maskLayer = CAShapeLayer() maskLayer.path = path.CGPath self.layer.mask = maskLayer } } let segmentedControl = UISegmentedControl(items: ["Red", "Green", "Blue"]) segmentedControl.subviews[0].addBorderWithColor(UIColor.blueColor(), roundingCorners: [.TopRight, .BottomRight]) segmentedControl.subviews[1].addBorderWithColor(UIColor.greenColor(), roundingCorners: []) segmentedControl.subviews[2].addBorderWithColor(UIColor.redColor(), roundingCorners: [.TopLeft, .BottomLeft]) segmentedControl.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: UIControlState.Normal) 

playground

Configure borderColor

Case 2 - Get Rid of Borders

code

 let segmentedControl = UISegmentedControl(items: ["Red", "Green", "Blue"]) //Change Text Attributes (Changing textColor to black) //**Be sure to manage all the UIControlState for these attributes if you need to customize this for other states segmentedControl.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.blackColor()], forState: UIControlState.Normal) //Change tintColor to clear, in order to set border invisible segmentedControl.tintColor = UIColor.clearColor() 

playground

Transparent borders

Original answer

No answer
You cannot remove a UISegmentedControl border

You can create a custom control using UIButton to achieve what you are looking for.

In the UISegmentedControl state UISegmentedControl you can remove the separators between elements in the UISegmentedControl , or you can change tintColor (borderColor)

enter image description here

+1
source

All Articles