【问题标题】:setBackgroundImage doesn't work for UISegmentControl in iOS 12setBackgroundImage 不适用于 iOS 12 中的 UISegmentControl
【发布时间】:2018-10-15 17:44:34
【问题描述】:

我自定义 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 中不起作用:

有什么想法吗?谢谢。

【问题讨论】:

  • batter 根据您的设计设置背景颜色
  • 必须使用图像而不是颜色。这只是一个例子,不是真实的图像。
  • 检查我的答案

标签: ios uisegmentedcontrol ios12


【解决方案1】:

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

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

您当然必须调整插图以匹配您的图像。

【讨论】:

    【解决方案2】:
        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;
            }
      }
    

    输出:

    【讨论】:

    • 您确定在 iOS 12 中运行吗?对我来说,它只显示灰色圆角矩形。
    • 现在我使用的是 xcode 9.0,我的电脑中没有 ios 12 模拟器,所以我在 ios 11 中工作,如果你有 ios 12 模拟器,那么就给它,这样我就可以为你仔细检查@周浩
    • 我的代码也在 iOS 11 中运行。但它不适用于 iOS 12。
    • 给我发你的电子邮件。我会给你发电子邮件。大约 12MB
    • 将链接发送给您。您需要将其重命名为 .zip,密码为 123456
    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2020-06-09
    • 2021-02-05
    相关资源
    最近更新 更多