ScrollingStackViewController API速查表:add、insert、show、hide、remove、scrollTo全方法一篇讲透

📅 2026/8/23 15:22:43
ScrollingStackViewController API速查表:add、insert、show、hide、remove、scrollTo全方法一篇讲透
ScrollingStackViewController API速查表add、insert、show、hide、remove、scrollTo全方法一篇讲透【免费下载链接】ScrollingStackViewControllerA view controller that uses root views of child view controllers as views in a UIStackView.项目地址: https://gitcode.com/gh_mirrors/sc/ScrollingStackViewControllerScrollingStackViewController 是 Just Eat 团队开源的 iOS 滚动视图控制器库它把子视图控制器放进 UIStackView 中做垂直滚动布局。本文是它的 API 速查表add、insert、show、hide、remove、scrollTo 六大核心方法一次讲透并附完整参数对照表帮你在 10 分钟内掌握全部用法。它解决什么问题 用UITableViewController展示数量有限、但每段都很复杂的内容时数据源模式有点杀鸡用牛刀索引管理也容易出 bug。ScrollingStackViewController 的思路更直接每一段内容都是一个独立的子视图控制器各自管理自己的逻辑布局交给UIStackView滚动交给UIScrollView你只需要添加、显示、隐藏、移除、滚动其余脚手架库都帮你搭好了。核心实现只有一个文件ScrollingStackViewController.swift支持 iOS 12 及以上。下面逐一看这 6 个方法。add把子控制器追加到列表末尾最简单的方式把子控制器直接加到栈的最后add(viewController: childVC)它也带一个可选的edgeInsets参数给子视图四周加内边距内部会自动包一层容器视图add(viewController: cardVC, edgeInsets: UIEdgeInsets(top: 20, left: 40, bottom: 20, right: 40))示例工程 ViewController.swift 里就用add一次性添加了 10 个彩色列其中 6 个带内边距。insert用 Position 精确控制插入位置✨insert是add的加强版通过Position枚举指定插入位置共 5 种位置含义.start插到最前面.end插到最后默认值.index(2)插到第 2 个索引处越界会自动收敛到末尾.after(viewController: A)插在控制器 A 的后面.before(viewController: B)插在控制器 B 的前面最常用的两行写法insert(viewController: newVC, at: .index(1)) insert(viewController: newVC, edgeInsets: insets, at: .after(existingVC))⚠️ 小提示Position定义在源文件 ScrollingStackViewController.swiftinsert的完整逻辑在 第 147-203 行。带edgeInsets插入时子视图会多包一层容器后续做显隐控制时建议配合show/hide使用。show 和 hide有动画的显示与隐藏 这两个方法不改变列表结构只改可见性是动态 UI 的主力show(viewController: tipVC) // 显示默认带动画 hide(viewController: tipVC) // 隐藏默认无动画 show(tipVC, animated: true) { done in ... } // 带完成回调注意两者默认值不对称show默认动画打开hide默认动画关闭。它们内部统一走set(_:hidden:animated:)方法用 alpha 淡入淡出实现过渡对未添加进列表的控制器调用会安全地返回false。还有一个二合一重载适合没有就先插入、有就直接显示的场景show(bannerVC, insertIfNeededWith: (position: .end, insets: .zero), animated: true)如果控制器还不在层级里它会按你给的position和insets自动插入已经在则只做显示。对应测试用例见 ScrollingStackViewInsertionLocationTests.swift。remove真正移除并清理父级关系hide只是隐藏remove才是从列表里彻底拿走——同时解除子控制器与父级的关系remove(viewController: oldVC) // 直接移除 remove(viewController: oldVC, animated: true) { done in ... }带animated: true时会先执行一次hide的淡出动画动画结束后才真正移除视觉更自然。 官方建议如果某些段落的显隐很频繁不如一开始就add好之后只show/hide省去反复增删的开销。scrollTo平滑滚动到指定子控制器scrollTo(viewController: detailVC) { print(滚动完成) }几个值得知道的细节滚动用的是弹簧动画默认 0.75 秒、阻尼 0.7手感柔和如果布局还没就绪库会自动等viewDidLayoutSubviews完成后再滚不用你手动处理时序对带edgeInsets的容器子视图滚动定位会自动换算成容器的位置偏移量始终准确参考 ScrollingStackViewTests.swift 中的滚动偏移测试。API 全方法速查表方法作用默认行为add(viewController:)追加到末尾无内边距insert(viewController:edgeInsets:at:)按Position插入position默认.endshow(_:animated:)淡入显示默认动画 truehide(_:animated:)淡出隐藏默认动画 falseremove(_:animated:)移除并解绑默认动画 falsescrollTo(viewController:)平滑滚动定位弹簧动画可回调show(_:insertIfNeededWith:)不存在则先插入再显示动画默认打开进阶自定义动画与外观属性库把scrollView、stackView、stackViewBackgroundView都暴露成了公开属性常用调优只有几个属性spacingColor .lightGray // 段与段之间的分隔线颜色 stackView.spacing 0.5 // 分隔线粗细间隔 borderWidth 1 // 整体边框宽度 borderColor .darkGray // 整体边框颜色想换动画风格替换两个闭包即可animate { animations, completion in UIView.animate(withDuration: 1, animations: animations, completion: completion) }animate管显隐过渡scrollAnimate管滚动过渡。3 个新手最容易踩的坑 子控制器必须能自撑高度给它加一个垂直方向的约束如固定高度或内容撑开否则在 StackView 里会塌成 0 高带edgeInsets添加的子视图外面多一层容器做显隐时优先用show/hideshow不等于add对一个从未添加过的控制器直接show是无效操作需要配合insertIfNeededWith重载才会自动插入。获取与体验项目通过 CocoaPods 安装只需一行pod ScrollingStackViewController也支持 Swift Package Manager配置见项目根目录的 Package.swift。想浏览示例工程和单元测试Tests 目录可克隆仓库git clone https://gitcode.com/gh_mirrors/sc/ScrollingStackViewController跑起来Example工程点顶部按钮就能看到hide/show切换和scrollTo滚动的真实效果——配合本文的速查表ScrollingStackViewController 的全部方法你都已经掌握了。【免费下载链接】ScrollingStackViewControllerA view controller that uses root views of child view controllers as views in a UIStackView.项目地址: https://gitcode.com/gh_mirrors/sc/ScrollingStackViewController创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考