【免费下载链接】SDSegmentedControl
A drop-in remplacement for UISegmentedControl that mimic iOS 6 AppStore tab controls
SDSegmentedControl 是一款面向 iOS 的即插即用分段控件组件,完美复刻 iOS 6 App Store 经典标签栏风格。它是系统 UISegmentedControl 的直接替代品,支持文本分段、图标、自定义宽度、滚动与动画等 8 大特性,帮你的 App 快速拥有专业级分段选择体验。
SDSegmentedControl 是什么?
系统自带的 UISegmentedControl 样式固定、等宽分割,很难满足现代 App 的视觉需求。SDSegmentedControl 直接继承 UISegmentedControl,却重绘了整块分段区域,实现了"滑动污迹(stain)+ 选中箭头"的经典 App Store 效果,并且用法与原生控件几乎一致——替换类名即可。
上图来自官方示例工程 Example/Example/ViewController.m,展示了动态增删分段、加载图标、禁用分段与自定义主题等真实交互效果。
8大特性逐一点评
1. 文本、图标与图文混排分段
一个分段可以同时承载三种内容形态:
- 纯文本:最常见的标签场景
- 纯图标:适合底部导航式切换
- 图标 + 文本:信息量最大,适合功能分区
示例工程中通过insertSegmentWithTitle:、insertSegmentWithImage:及setImage:forSegmentAtIndex:三组接口灵活组合,见 Example/Example/ViewController.m#L49-L73。
2. Interface Builder 可视化支持
无需写一行代码:在 Xcode 中拖入一个 UISegmentedControl,把它的类改成SDSegmentedControl,控件即刻变身。这一特性对新手格外友好,可视化布局与真实运行时行为完全一致。
3. 分段选中动画 🎬
切换分段时,选中"污迹"会平滑滑动到新位置,而不是生硬跳变。动画时长可通过animationDuration属性调节(默认 0.2 秒),定义在 SDSegmentedControl.h#L30。
4. 可滚动分段(内容超出宽度时)
分段太多、屏幕装不下?组件会自动切换为横向滚动模式,底层由 UIScrollView 驱动。这解决了原生控件在宽内容下挤压变形的老大难问题,长列表场景(如多标签新闻页)非常实用。
5. 内容感知动态宽度
分段宽度会根据内容"见机行事":文字长的分段自动变宽,短文本分段保持紧凑。相比原生等宽分割,视觉重心更均匀,是它相比 UISegmentedControl 最直观的体验升级。
6. 单个分段独立自定义宽度
动态宽度不够用?还可以为任意分段指定精确宽度,接口为setWidth:forSegmentAtIndex:,实现见 SDSegmentedControl.m#L388。比如让"全部"按钮比其它标签宽 200pt,一行调用即可。
7. 启用/禁用指定分段
通过setEnabled:forSegmentAtIndex:(SDSegmentedControl.m#L354)可单独禁用某个分段,被禁用的分段会显示为灰色不可点击,且若禁用的恰是选中项,组件会自动回退到最近的可用分段,逻辑周全。
8. UIAppearance 主题定制 + 事件回调
组件暴露了三层外观定制入口——SDSegmentedControl、SDSegmentView、SDStainView(SDSegmentedControl.h#L11-L15),可以修改背景色、边框、箭头大小与位置、字体、阴影等,一处设置全局生效。选中变化则通过标准 UIControl 事件回调,与原生控件事件系统完全兼容,老代码零成本迁移。
快速上手:3步集成
- 将 SDSegmentedControl.h 与 SDSegmentedControl.m 拷入工程,并在Link Binary With Libraries中添加
QuartzCore框架; - 在代码或 XIB 中将控件类替换为
SDSegmentedControl; - 像使用 UISegmentedControl 一样设置分段、监听事件,完成 ✅
项目元信息与 CocoaPods 配置可参考 SDSegmentedControl.podspec,完整说明见 README.md。
核心文件速查
| 文件 | 说明 |
|---|---|
| SDSegmentedControl.h | 公开 API:外观属性、箭头枚举、分段视图接口 |
| SDSegmentedControl.m | 核心实现:动画、滚动、动态宽度(约 1400 行) |
| Example/Example/ | 可运行的 iOS 示例工程 |
| doc/screencast.gif | 运行效果演示动画 |
写在最后
SDSegmentedControl 用极小的代码体量(一个头文件 + 一个实现文件),换来了 8 项原生控件给不了的能力:图文混排、动画切换、滚动适配、自定义宽度与完整的主题系统。如果你正在为 App 挑选分段控件组件,它值得一试 👍
【免费下载链接】SDSegmentedControl
A drop-in remplacement for UISegmentedControl that mimic iOS 6 AppStore tab controls
相关推荐
Maple Mono 等宽字体完整指南:特性、连字、自定义构建与源码解析
Maple Mono 等宽字体完整指南:特性、连字、自定义构建与源码解析 Maple Mono 是一款专注于提升编码体验的开源等宽字体(open source
开发工具Wireshark自定义协议解析器文档评审标准:清单
Wireshark自定义协议解析器文档评审标准:清单 协议解析器是Wireshark的核心功能模块,其文档质量直接影响代码可维护性与社区协作效率。本文档基于 d
网络通信Kvaesitso 逐项自定义(Per-Item Customization)完全指南:自定义标签、图标与 Tags
Kvaesitso 逐项自定义(Per Item Customization)完全指南:自定义标签、图标与 Tags 本文面向 Kvaesitso 用户,讲解如
移动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考