Swift5・iOS13でUISegmentedControlの背景色、選択色、文字色をカスタマイズする方法【Swift5/Objective-C】

2020年8月26日

iOS13からUISegmentedControlをカスタマイズする方法が少し変わったので背景色、選択色、文字色、枠線のカスタマイズ方法をご紹介します。

UISegmentedControlの背景色、選択色、文字色、枠線をカスタマイズする方法

Swift5

let segmentedControl : UISegmentedControl = UISegmentedControl(items: ["aaa","bbb","ccc"])
segmentedControl.frame = CGRect(x: 50, y: 100, width: 300, height: 50)
segmentedControl.selectedSegmentIndex = 0

// 背景色
segmentedControl.backgroundColor = UIColor.red
// 選択時の背景色(iOS13から選択時の背景はselectedSegmentTintColorで指定するようになりました)
if #available(iOS 13.0, *) {
    segmentedControl.selectedSegmentTintColor = UIColor.blue
}
else {
    segmentedControl.tintColor = UIColor.blue
}
// 文字色
segmentedControl.setTitleTextAttributes( [NSAttributedString.Key.foregroundColor:UIColor.yellow], for: .normal)
// 枠線
segmentedControl.layer.borderColor = UIColor.green.cgColor
segmentedControl.layer.borderWidth = 3


self.view.addSubview(segmentedControl)

Objective-C

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:@[ @"aaa", @"bbb", @"ccc"]];
segmentedControl.frame = CGRectMake(50, 100, 300, 50);
segmentedControl.selectedSegmentIndex = 0;

// 背景色
segmentedControl.backgroundColor = [UIColor redColor];
// 選択時の背景色(iOS13から選択時の背景はselectedSegmentTintColorで指定するようになりました)
if (@available(iOS 13.0, *)) {
    segmentedControl.selectedSegmentTintColor = [UIColor blueColor];
}
else {
    segmentedControl.tintColor = [UIColor blueColor];
}
// 文字色
[segmentedControl setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor yellowColor]} forState:UIControlStateNormal];
// 枠線
segmentedControl.layer.borderColor = [[UIColor greenColor] CGColor];
segmentedControl.layer.borderWidth = 3;

[self.view addSubview:segmentedControl];