我用于自定义UISegmentControl的代码:
let backgroundImage = UIImage(named: "segmented_unselected_bg")
let dividerImage = UIImage(named: "segmented_separator_bg")
let backgroundImageSelected = UIImage(named: "segmented_selected_bg")
self.segment.setBackgroundImage(backgroundImage, for: .normal, barMetrics: .default)
self.segment.setBackgroundImage(backgroundImageSelected, for: .highlighted, barMetrics: .default)
self.segment.setBackgroundImage(backgroundImageSelected, for: .selected, barMetrics: .default)
// to remove the seperator between segments
self.segment.setDividerImage(dividerImage, forLeftSegmentState: UIControlState(), rightSegmentState: .selected, barMetrics: .default)
self.segment.setDividerImage(dividerImage, forLeftSegmentState: .selected, rightSegmentState: UIControlState(), barMetrics: .default)
self.segment.setDividerImage(dividerImage, forLeftSegmentState: UIControlState(), rightSegmentState: UIControlState(), barMetrics: .default)
在iOS 10.3中正常工作:
但是在iOS 12中不起作用:
有什么主意吗?谢谢。
答案 0 :(得分:0)
您是否尝试过使用.resizableImage(withCapInsets:UIEdgeInsets)创建图像?
let backgroundImage = UIImage(named: "segmented_unselected_bg")?.resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0))
您当然必须调整插图以匹配您的图像。
答案 1 :(得分:0)
let items = ["Purple", "Green", "Blue"]
let customSC = UISegmentedControl(items: items)
customSC.selectedSegmentIndex = 0
// Set up Frame and SegmentedControl
let frame = UIScreen.main.bounds
customSC.frame = CGRect(x: frame.minX + 10, y: frame.height - 100, width: frame.width - 20, height: 48)
// Style the Segmented Control
customSC.layer.cornerRadius = 5.0 // Don't let background bleed
customSC.backgroundColor = UIColor.gray
customSC.tintColor = UIColor.white
let myAttribute1 = [ NSAttributedStringKey.font: UIFont(name: "Menlo-Regular", size: 15.0)!, NSAttributedStringKey.foregroundColor: UIColor.init(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0)]
let myAttribute2 = [ NSAttributedStringKey.font: UIFont(name: "Menlo-Bold", size: 15.0)!, NSAttributedStringKey.foregroundColor: UIColor.init(red: 255/255, green: 255/255, blue: 255/255, alpha: 1.0)]
customSC.setTitleTextAttributes(myAttribute1, for: .normal)
customSC.setTitleTextAttributes(myAttribute2, for: .selected)
customSC.layer.cornerRadius = 5.0
customSC.clipsToBounds = true
customSC.setDividerImage(UIImage(), forLeftSegmentState: .selected, rightSegmentState: .normal, barMetrics: .default)
customSC.setBackgroundImage(#imageLiteral(resourceName: "img_header"), for: .selected, barMetrics: .default)
customSC.setBackgroundImage(UIImage(), for: .normal, barMetrics: .default)
// Add target action method
customSC.addTarget(self, action: #selector(changeColor(_:)), for: .valueChanged)
// Add this custom Segmented Control to our view
self.view.addSubview(customSC)
细分点击的代理方法
@objc func changeColor(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 1:
break;
case 2:
break;
default:
break;
}
}
输出: