资讯动态

ScrollingStackViewController完整API参考:全部公开方法的签名、参数与使用场景逐一详解

发布时间:2026/8/23 12:38:25 来源:尧图企业网站定制
ScrollingStackViewController完整API参考全部公开方法的签名、参数与使用场景逐一详解【免费下载链接】ScrollingStackViewControllerA view controller that uses root views of child view controllers as views in a UIStackView.项目地址: https://gitcode.com/gh_mirrors/sc/ScrollingStackViewControllerScrollingStackViewController 是一款 iOS 开源库它把子视图控制器的根视图直接作为 UIStackView 中的视图用最少代码搭建分段式可滚动页面。本文是其完整 API 参考逐一详解全部公开方法的签名、参数与使用场景适合刚接触的开发者快速上手。为什么需要 ScrollingStackViewController当页面只由几个大块组成时——比如订单详情页的收货信息、商品清单、配送地址——用UITableViewController往往很别扭DataSource 模式是过度设计索引管理容易出错Controller 逻辑也难以拆分。ScrollingStackViewController 的解法是每个分段就是一个子视图控制器布局交给UIStackView滚动交给UIScrollViewUIKit 的各种坑由容器统一处理。它来自 Just Eat 团队其 App 的订单详情页就是典型应用。核心结构三个公开视图该类继承自UIViewController完整实现位于ScrollingStackViewController/Classes/ScrollingStackViewController.swift内部维护三块可直接操作的公开视图属性类型使用场景scrollViewUIScrollView整体滚动容器可设置alwaysBounceVertical等stackViewUIStackView垂直排列所有子视图可调整spacingstackViewBackgroundViewUIView背景层决定分段之间分隔线的颜色需要微调时直接操作这三个视图即可无需封装额外逻辑。Position 枚举5 种插入位置一次看懂插入子控制器时最核心的参数全部取值如下取值含义.start插到最顶部.end插到最底部默认值.index(n)插到第 n 个位置越界时自动截断到末尾.after(viewController)插到指定子控制器之后.before(viewController)插到指定子控制器之前添加子控制器add 与 insert 全签名方法参数使用场景add(viewController:)子控制器最常用追加到末尾add(viewController:edgeInsets:)子控制器、内边距需要左右留白的卡片式分段insert(viewController:at:)子控制器、索引Int按下标精确插入insert(viewController:edgeInsets:at:)子控制器、内边距、Position按语义位置插入最灵活最小示例add(viewController: child1) // 追加到末尾 insert(viewController: child2, edgeInsets: UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8), at: .after(child1)) // 带内边距插到 child1 之后⚠️ 注意传入edgeInsets时子视图会先包进一个容器视图再进栈此时显隐应配合show/hide另外子视图控制器必须约束好自身垂直方向的高度否则布局会塌陷。显隐分段show、hide、set 三大方法方法参数说明show(_:animated:completionHandler:)子控制器、是否动画、回调淡入显示默认带动画hide(_:animated:completionHandler:)同上淡出隐藏默认无动画set(_:hidden:animated:completionHandler:)子控制器、布尔值、是否动画、回调统一入口前两个方法的底层实现显隐只是修改alpha与isHidden子控制器不会被移除内部状态得以保留。这也是推荐做法一次性add所有分段之后按需 show/hide避免频繁增删带来的索引管理问题。智能插入show(insertIfNeededWith:) 高级用法签名show(_:insertIfNeededWith:animated:completionHandler:)insertionParameters(position: Position, insets: UIEdgeInsets)?元组决定不存在时插在哪、留多少边距传nil仅当子控制器已在视图层级中时才显示否则不做任何事适合数据到达后再展示对应分段的场景show(promoVC, insertIfNeededWith: (position: .end, insets: .zero))彻底移除remove 方法与动画签名remove(_:animated:completionHandler:)默认无动画直接从stackView及父子控制器关系中移除animated: true时先执行淡出动画再移除与hide的关键区别remove会释放层级关系子视图从窗口中彻底消失程序化滚动scrollTo 快速定位任意分段签名scrollTo(viewController:_ action:)自动滚动到指定子控制器action在滚动结束后回调。它内部处理了两个常见坑布局未结束时自动等待下一次viewDidLayoutSubviews带edgeInsets的子视图也会正确定位到其包裹容器。scrollTo(viewController: segments[7]) { print(Done scrolling!) }动画定制替换 animate 与 scrollAnimate属性默认行为使用场景animate0.5s 弹簧动画damping 1.0由静态方法defaultAnimate提供控制 show/hide/set 的过渡手感scrollAnimate0.75s 弹簧动画damping 0.7由defaultScrollAnimate提供控制 scrollTo 的滚动手感两者都是闭包属性直接赋值即可全局替换动画风格无需改动任何逻辑代码。状态查询arranged 系列 6 个方法方法返回使用场景isArranged(view:)Bool判断某视图是否为栈内直接子视图isArrangedOrContained(view:)Bool连同 edgeInsets 容器一起判断arrangedView(for:)UIView?获取子控制器真正进栈的那个视图arrangedViewIndex(for:)Int?视图在栈中的下标arrangedViewContainerIndex(for:)Int?包裹容器在栈中的下标arrangedViewOrContainerIndex(for:)Int?后两者的综合查找最常用全部 27 个公开 API 速查表分组API一句话说明视图scrollView/stackView/stackViewBackgroundView滚动容器、堆栈视图、背景层样式spacingColor/borderColor/borderWidth分隔线颜色、边框颜色、边框宽度动画animate/scrollAnimate/defaultAnimate/defaultScrollAnimate显隐动画、滚动动画及其默认实现插入add×2 /insert×3追加或按位置插入子控制器显隐show×2 /hide/set显示、隐藏、显隐统一入口移除remove从层级中彻底移除子控制器滚动scrollTo程序化滚动定位查询isArranged系列 ×6判断与查找子视图位置最佳实践清单✅ 子视图控制器务必约束好自身垂直高度否则布局会塌✅ 分段数量明确时先全部add再用show/hide控制✅ 需要边距的分段用edgeInsets包容器显隐配合show/hide✅ 需要微调时直接操作公开的scrollView、stackView❌ 避免在 show/hide 完成回调中做耗时的索引计算想深入这些源码文件值得看文件内容ScrollingStackViewController/Classes/ScrollingStackViewController.swift全部公开 API 的完整实现Example/ScrollingStackViewController/ViewController.swift10 个分段的完整示例Example/Tests/ScrollingStackViewTests.swift滚动、显隐、边距的单元测试Example/Tests/ScrollingStackViewInsertionLocationTests.swiftPosition 五种位置的插入行为测试Package.swift/ScrollingStackViewController.podspecSPM 与 CocoaPods 集成配置掌握这份 API 后你就能用 3 行代码搭起可滚动分段页面并用 show/hide/scrollTo 组合出流畅的交互体验了。【免费下载链接】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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价