2015-07-27 16 views

cevap

25

Aşağıdaki işlevi kullanarak hem kenarlıkları hem de ayırıcıları kaldırabilirsiniz. UISegmentedControl uzantısı oluşturun:

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

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

Çağrı yukarıdaki fonksiyonu.

segmentedControl.removeBorders() 

Referans: Swift 3 sürümü için https://stackoverflow.com/users/3921490/amagain için Remove UISegmentedControl separators completely. (iphone)

teşekkürler.

+0

Teşekkür sınırları kaydetmek istiyorsanız Ama bir soru daha, bu benim parçalı denetim keskin dikdörtgen köşe var yapacak, herhangi bir yolu yapmak yuvarlak mı? – Happiehappie

+0

@Happiehappie hayır yapamazsınız, lütfen bu cevaba bakın http://stackoverflow.com/questions/1834244/uisegmentedcontrol-without-rounded-corner –

+0

Ölümcül hata alıyorum: Beklenmedik şekilde bir Opsiyonel değer çıkarılırken sıfır bulundu on line setBackgroundImage (imageWithColor (color: backgroundColor!), için: .normal, barMetrics: .default) ' – Kakaji

9

Sohil 'un hızlı bir sürümünün, bir başkasına yardımcı olabileceği yanıtı. Bana yardım etti. İşe yaradı :) :)

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

D = hücreler arasında

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