PageState 关注页面状态的切换以及状态视图在容器视图中的布局方式,不关心状态视图的具体内容。通过 PageState 可以方便地管理视图各种状态之间的切换,例如“加载中”、“网络错误”、“空数据”等。
对 UIScrollView、UITableView、UICollectionView 进行扩展:
- 有数据时自动隐藏,需要调用
tableView.ps.realoadData()
; - 控制显示状态视图时是否可滑动;
要运行示例项目,首先克隆仓库,然后从 Example 目录运行 pod install
。
- iOS 10.0+
- Xcode 10.0+
- Swift 4.2+
PageState 通过 CocoaPods 提供。要安装,只需将以下行添加到您的 Podfile:
pod 'PageState'
- 实现
PageStateItem
协议
// MARK: - 系统组件直接实现 PageStateItem 协议(不推荐)
// 为系统组件快速实现扩展,不实现的设置项使用默认值
// 不建议这么写
// 1. 会污染UILabel的命名空间
// 2. 无法PageStateItem设置项无法重写为存储属性,无法在外部修改
//extension UILabel: PageStateItem {
// // 布局改为居中,UILabel可以自约束宽高
// public var layoutStyle: PageStateLayoutStyle {
// return .center(offset: .zero)
// }
//}
// MARK: - 子类化
class PSLabelItem: UILabel, PageStateItem {
// 布局改为居中,UILabel可以自约束宽高
// 时候用计算属性,不让外部修改
public var layoutStyle: PageStateLayoutStyle {
return .center(offset: .zero)
}
// 重写为存储属性,外部可修改
var isScrollAllowed: Bool = false
// 自定义快捷方法
static func empty(text: String = "暂无数据") -> PSLabelItem {
let label = PSLabelItem()
label.font = .systemFont(ofSize: 16, weight: .regular)
label.textColor = .lightGray
label.text = text
return label
}
}`
- 给容器视图设置各种状态
// 加载中
tableView.ps.item = PSLabelItem.empty(text: "加载中...")
// 移除状态视图
tableView.ps.item = nil
有关更多用法说明,请参阅文档 Usage 或查看示例
zhaoshouwen, [email protected]
PageState 可在 MIT 许可协议下使用。有关更多信息,请参阅 LICENSE 文件。