How to set backgroundColor of UISegmentedControl to white in iOS 13

倾然丶 夕夏残阳落幕 提交于 2019-12-04 05:09:02
Jayesh Thummar

Use this extension for the existing segment controller in iOS13

        extension UISegmentedControl
        {
            func setOldLayout(tintColor: UIColor)
            {
                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)
            }
        }
        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()!)!
            }
        }

Use it directly like this

segmentedControl.setOldLayout(tintColor: .blue)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!