How to change the colors of a segment in a UISegmentedControl in iOS 13?

前端 未结 14 829
醉话见心
醉话见心 2020-11-30 18:13

A UISegmentedControl has a new appearance in iOS 13 and existing code to alter the colors of the segmented control no longer work as they did.

Prior to

14条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-30 18:35

    iOS13 UISegmentController

    how to use:

    segment.setOldLayout(tintColor: .green)
    
    extension UISegmentedControl
    {
        func setOldLayout(tintColor: UIColor)
        {
            if #available(iOS 13, *)
            {
                let bg = UIImage(color: .clear, size: CGSize(width: 1, height: 32))
                 let devider = UIImage(color: tintColor, size: CGSize(width: 1, height: 32))
    
                 //set background images
                 self.setBackgroundImage(bg, for: .normal, barMetrics: .default)
                 self.setBackgroundImage(devider, for: .selected, barMetrics: .default)
    
                 //set divider color
                 self.setDividerImage(devider, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
    
                 //set border
                 self.layer.borderWidth = 1
                 self.layer.borderColor = tintColor.cgColor
    
                 //set label color
                 self.setTitleTextAttributes([.foregroundColor: tintColor], for: .normal)
                 self.setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
            }
            else
            {
                self.tintColor = tintColor
            }
        }
    }
    extension UIImage {
        convenience init(color: UIColor, size: CGSize) {
            UIGraphicsBeginImageContextWithOptions(size, false, 1)
            color.set()
            let ctx = UIGraphicsGetCurrentContext()!
            ctx.fill(CGRect(origin: .zero, size: size))
            let image = UIGraphicsGetImageFromCurrentImageContext()!
            UIGraphicsEndImageContext()
    
            self.init(data: image.pngData()!)!
        }
    }
    

提交回复
热议问题