setBackgroundImage对iOS 12中的UISegmentControl不起作用

时间:2018-10-15 08:19:46

标签: ios uisegmentedcontrol ios12

我用于自定义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中正常工作:

enter image description here

但是在iOS 12中不起作用:

enter image description here

有什么主意吗?谢谢。

2 个答案:

答案 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;
        }
  }

输出:

enter image description here