在项目需求中需要实现如下UI效果(背景色自定义,并且去除segmentcontrol中间的分割线及边框颜色):
实现代码如下:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let segment = UISegmentedControl(items: ["测试一", "测试二", "测试三"])
segment.frame = CGRect(x: 100, y: 100, width: 250, height: 40)
segment.center.x = self.view.center.x
segment.setSegmentStyle(normalColor: UIColor(red: 249/255.0, green: 249/255.0, blue: 249/255.0, alpha: 1.0), selectedColor: UIColor(red: 251/255.0, green: 84/255.0, blue: 6/255.0, alpha: 1.0), dividerColor: UIColor.clear)
segment.selectedSegmentIndex = 0
view.addSubview(segment)
}
}
//通过输入rgb值返回一个该颜色的img
extension UIImage{
public class func renderImageWithColor(_ color: UIColor, size: CGSize) -> UIImage {
UIGraphicsBeginImageContext(size)
guard let context = UIGraphicsGetCurrentContext() else {
UIGraphicsEndImageContext()
return UIImage()
}
context.setFillColor(color.cgColor);
context.fill(CGRect(x: 0, y: 0, width: size.width, height: size.height));
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img ?? UIImage()
}
}
extension UISegmentedControl {
/// 自定义样式
/// - Parameters:
/// - normalColor: 普通状态下背景色
/// - selectedColor: 选中状态下背景色
/// - dividerColor: 选项之间的分割线颜色
func setSegmentStyle(normalColor: UIColor, selectedColor: UIColor, dividerColor: UIColor) {
let normalColorImage = UIImage.renderImageWithColor(normalColor, size: CGSize(width: 1.0, height: 1.0))
let selectedColorImage = UIImage.renderImageWithColor(selectedColor, size: CGSize(width: 1.0, height: 1.0))
let dividerColorImage = UIImage.renderImageWithColor(dividerColor, size: CGSize(width: 1.0, height: 1.0))
setBackgroundImage(normalColorImage, for: .normal, barMetrics: .default)
setBackgroundImage(selectedColorImage, for: .selected, barMetrics: .default)
setDividerImage(dividerColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
// 文字在两种状态下的颜色
setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.gray, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14)], for: .normal)
setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white,NSAttributedString.Key.font: UIFont.systemFont(ofSize: 14)], for: .selected)
// 边界颜色、圆角
self.layer.borderWidth = 0.7
self.layer.cornerRadius = 5.0
self.layer.borderColor = dividerColor.cgColor
self.layer.masksToBounds = true
}
}