如何在Storyboard中移除UISegmentedControl的默认UIImage灰色背景
UISegmentedControl 移除默认浅灰色背景方案
以下为适配不同系统版本的实现方法:
代码实现方案
你可以在控制器的viewDidLoad方法,或自定义UISegmentedControl子类的初始化方法中添加对应代码:
iOS 13及以上版本
苹果在iOS13更新了UISegmentedControl的公开API,直接调用官方提供的背景设置方法即可:
// Swift 代码示例 if #available(iOS 13.0, *) { // 清除默认背景 segmentedControl.setBackgroundImage(UIImage(), for: .normal, barMetrics: .default) // 清除选项之间的分割线 segmentedControl.setDividerImage(UIImage(), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default) // 按需设置选中态的 tint 颜色 segmentedControl.selectedSegmentTintColor = .systemBlue }
// Objective-C 代码示例 if (@available(iOS 13.0, *)) { [self.segmentedControl setBackgroundImage:[UIImage new] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; [self.segmentedControl setDividerImage:[UIImage new] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; self.segmentedControl.selectedSegmentTintColor = [UIColor systemBlueColor]; }
iOS 12及以下版本
低版本系统没有提供公开的背景清除API,可通过遍历子视图清空背景色实现:
// Swift 代码示例 for subview in segmentedControl.subviews { subview.backgroundColor = .clear }
// Objective-C 代码示例 for (UIView *subview in self.segmentedControl.subviews) { subview.backgroundColor = [UIColor clearColor]; }
Storyboard 无代码实现方案
不需要写代码也可以直接在Storyboard中配置:
- 选中UISegmentedControl控件,打开右侧的「身份检查器(Identity Inspector)」
- 在「User Defined Runtime Attributes」中添加两个属性:
- 键路径填
backgroundImage,类型选Image,值留空或者选择你提前准备的1x1透明图片 - 键路径填
selectedSegmentTintColor,类型选Color,设置为你需要的选中色即可
- 键路径填
如果需要全局修改所有UISegmentedControl的样式,可在App启动时通过
UIAppearance统一配置,不需要逐个修改控件。
视图层级参考
你提供的视图层级调试器截图如下:

内容的提问来源于stack exchange,提问作者nix.codes
相关产品推荐
相关产品推荐

