iOS13でUISegmentedControlの背景を透明にするためには、透明画像を背景にセットする必要がある。
実装方法
UIImage+.swift
import UIKit
extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
HogeViewController.swift
final class HogeViewController: UIViewController {
@IBOutlet weak var segmentedControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
setupSegmentedControl()
}
private func setupSegmentedControl() {
let clearColorImage = UIImage(color: .clear, size: CGSize(width: 1, height: 1))
segmentedControl.setBackgroundImage(clearColorImage, for: .normal, barMetrics: .default)
segmentedControl.setDividerImage(clearColorImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
}
}