代码之家  ›  专栏  ›  技术社区  ›  Bagusflyer

setBackgroundImage不适用于iOS 12中的UISegmentControl

  •  1
  • Bagusflyer  · 技术社区  · 6 年前

    自定义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)
    

    enter image description here

    但它在iOS 12中不起作用:

    enter image description here

    你知道吗?谢谢。

    2 回复  |  直到 6 年前
        1
  •  0
  •   rodskagg    6 年前

    您是否尝试过使用.resizableImage(带capinsets:UIEdgeInsets)创建图像?

    let backgroundImage = UIImage(named: "segmented_unselected_bg")?.resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0))
    

        2
  •  0
  •   Himanshu Moradiya    6 年前
        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