ScrollingStackViewController 6.0.0

ScrollingStackViewController 6.0.0

测试已测试
语言语言 SwiftSwift
许可 Apache-2.0
发布上一次发布2022年4月
SPM支持 SPM

Alberto De BortoliDimi ChakarovMark CousinsJust Eat Takeaway.com iOS Team 维护。



  • 作者
  • Just Eat Takeaway iOS Team

ScrollingStackViewController Banner

ScrollingStackViewController

Build Status Version License Platform

ScrollingStackViewController 是一个方便的替代品,适用于大多数 UITableViewController 用例,特别是在您需要构建具有有限数量、动态和丰富的“单元格”的滚动控制器时。

动机

在需要显示大量相对简单的单元格时,UITableViewController 很好。有时,您可能只想将视图控制器垂直分割成几个部分。这些部分可能极为异质和复杂,数量明确,但您仍然想根据情况进行显示和隐藏。您可以使用 UITableViewController 来实现这一点,但实际上它会变得很尴尬。

  • 这里的“数据源模式”过于繁琐。您可以直接添加您的部分并显示/隐藏它们,无需通过 cellForRow:at:、表视图更新等。当您想要显示和隐藏不同的单元格时,乱七八糟的索引通常会导致错误和崩溃,有时还有困难来优雅地动画化。
  • 很难很好地分割代码。`UITableViewCell` 属于视图层,因此您必须将 Controller 部分保留在包含视图控制器中,这样您就没有分割 Controller 层,或者您必须腐化 `UITableViewCell` 并在其中放置 Controller 代码。在任一情况下——都不是胜利者。

上述问题通过ScrollingStackViewController提供的解决方案是:使用子视图控制器,这样就可以真实独立地保持自己的控制器代码,同时使用UIStackView处理布局和UIScrollView处理滚动。它是一个简单的类,提供了所有的框架支持,旨在处理UIKit通常会带来的各种怪异问题。

ScrollingStackViewController Demo

我们邀请您查看Just Eat UK应用中的“订单详情”页面,其中每个部分都是一个子视图控制器,这使得这种页面非常适合使用ScrollingStackViewController。包含视图控制器只需要知道如何实例化、初始化和添加子控制器。

使用方法

ScrollingStackViewController继承。实例化并添加你的子视图控制器。确保你的子视图控制器有实现自动垂直调整大小的约束

class ViewController: ScrollingStackViewController {
    
    var viewController1: UIViewController!
    var viewController2: UIViewController!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
            
        viewController1 = storyboard.instantiateViewController(withIdentifier: "ChildController1") as! ChildController1
        viewController2 = storyboard.instantiateViewController(withIdentifier: "ChildController2") as! ChildController2
        
        add(viewController: viewController1)
        add(viewController: viewController2)            
    }
}

在位置插入子视图控制器。

insert(viewController: viewController3, at: .index(1))

带填充插入子视图控制器(子视图添加到容器视图)。NB:当向带有填充的容器视图添加子视图时,应使用显示/隐藏函数。

insert(viewController: viewController4,
           edgeInsets: UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8),
                   at: .after(viewController3))

删除子视图控制器。NB:也许直接添加你打算使用的所有VC,然后再根据需要显示和隐藏它们会更简单。详见下文。

remove(viewController: viewController3)

使用show(viewController:)hide(viewController:)来显示和隐藏视图控制器。过渡会动画化。

show(viewController: viewController1)

默认动画为持续时间为0.5秒和阻尼系数为1的弹簧动画。你可以覆盖默认的动画闭包。

animate = { animations, completion in
    UIView.animate(withDuration: 1, animations: animations, completion: completion)
}

添加间距。

spacingColor = UIColor.lightGray
stackView.spacing = 0.5

添加边框。

borderColor = UIColor.darkGray
borderWidth = 1

以编程方式滚动到子视图控制器。

scrollTo(viewController: viewController2, action: { print("Done scrolling!") })

覆盖滚动动画。

scrollAnimate = { animations, completion in
    UIView.animate(withDuration: 1, animations: animations, completion: completion)
}

如果需要执行未快速覆盖的内容,你仍然可以访问堆叠视图、滚动视图和 backing view。

scrollView.alwaysBounceVertical = false
stackView.spacing = 1
stackViewBackgroundView.alpha = 0

要求

ScrollingStackViewController需要iOS 12或更高版本。

安装

CocoaPods

ScrollingStackViewController通过CocoaPods提供。要安装它,只需将以下行添加到你的Podfile中

pod "ScrollingStackViewController"

Swift 包管理器

ScrollingStackViewController 也可通过 SPM 获取。复制此存储库的 URL,并将包添加到您的项目设置中。

许可证

ScrollingStackViewController 在 Apache 许可证 2.0 版本下可用,2004 年 1 月。更多详细信息请参阅 LICENSE 文件。

  • Just Eat iOS 团队