一、前言
如果你还没有看过下面的文章,可以花点时间看看
1.一行代码完成“空TableView占位视图”管理:
https://www.jianshu.com/p/0a5f6b221ab6
原理:
1.获取 Section 的数量
2.获取每一个 Section 当中 Cell 的数量
2.UITableView没数据时用户提示如何做?
https://www.jianshu.com/p/e39699b0d134
原理:
基于 [dataSource count];
一行代码实现
3.iOS 0行代码实现 TableView 无数据时展示占位视图
https://www.jianshu.com/p/246b445ec4e3
原理:
1.获取 Section 的数量
2.获取每一个 Section 当中 Cell 的数量
二、正题:
1.原理
UITableView有一个属性:
@property (nonatomic, readonly) NSArray<__kindof UITableViewCell *> *visibleCells;
UICollectionView有同样的一个属性:
@property (nonatomic, readonly) NSArray<__kindof UICollectionViewCell *> *visibleCells;
都是获取可见的 Cell
可以根据 reload 之后,可见 Cell 的数量来判断,列表是否为空。
2.遇到的问题
collectionView 在 reload 之后 self.visibleCells.count 是 0
经查找,需要先调用 [self layoutIfNeeded];
才行
参考:
3.通过实现代理方法来定制图片与文字,以及代理返回的 emptyView 进行更多定制
3.1collectionView 的代理方法
@protocol JHNoDataUICollectionViewDelegate <NSObject>
@optional
/// offer a image to show some infomation for user.
-(UIImageView *)imageViewForCollectionViewWhenDataSourceIsEmpty;
/// offer a label to show some infomation for user.
-(UILabel *)labelForCollectionViewWhenDataSourceIsEmpty;
/// the empty view that add to tableView.
-(void)emptyViewForCollectionViewWhenDataSourceIsEmpty:(UIView *)emptyView;
@end
3.2tableView 的代理方法
@protocol JHNoDataUITableViewDelegate <NSObject>
@optional
/// offer a image to show some infomation for user.
-(UIImageView *)imageViewForTableViewWhenDataSourceIsEmpty;
/// offer a label to show some infomation for user.
-(UILabel *)labelForTableViewWhenDataSourceIsEmpty;
/// the empty view that add to tableView.
-(void)emptyViewForTableViewWhenDataSourceIsEmpty:(UIView *)emptyView;
@end
地址: