You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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统一配置,不需要逐个修改控件。


视图层级参考

你提供的视图层级调试器截图如下:
视图层级截图1
视图层级截图2

内容的提问来源于stack exchange,提问作者nix.codes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:24:04