How to remove border from segmented control

后端 未结 9 2228
刺人心
刺人心 2020-12-03 05:04

How do I remove the outside border of a segmented control? I\'ve set the divider image to what I wanted but now to follow the mock of my app I need to have a segmented cont

9条回答
  •  盖世英雄少女心
    2020-12-03 05:45

    Swift 5.x:

    This solution remove only the external border and preserve the round corner on each button

    extension UISegmentedControl {
        func removeBorders(andBackground:Bool=false) {
            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)
    
            _ = self.subviews.compactMap {
                if ($0.frame.width>0) {
                    $0.layer.cornerRadius = 8
                    $0.layer.borderColor = UIColor.clear.cgColor
                    $0.clipsToBounds = true
                    $0.layer.borderWidth = andBackground ? 1.0 : 0.0
                    $0.layer.borderColor = andBackground ? tintColor?.cgColor : UIColor.clear.cgColor
                    andBackground ? $0.layer.backgroundColor = UIColor.clear.cgColor : nil
                }
            }
        }
    
        // 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!
        }
    }
    

    Usage:

    mySegmentedControl.removeBorders()
    

提交回复
热议问题