- DZNEmptyDataSet github的链接:DZNEmptyDataSet
- DZNEmptyDataSet 是基于 UITableView/UICollectionView 的范畴/扩展(category)类,它可以在空白页面上显示提示信息。
这是 iOS 内建的标准,用于处理空表和集合视图。默认情况下,如果你的表视图是空的,屏幕上什么也不会显示,它给用户的体验不是很好。
使用这个库,你只需要实现一些协议,iOS 就会很好地处理集合视图,然后合理美观地显示出用户信息。
使用方法:
- 设置UITableView/UICollectionView 代理的时候设置emptyDataSetSource和emptyDataSetDelegate
- 实现代理方法 ,(按项目的需求实现)
1、设置空视图显示的文字
- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
NSString *title = @"暂无数据";
NSDictionary *attributes = @{
NSFontAttributeName:Xmz_14FontSize,
NSForegroundColorAttributeName:[UIColor colorWithHexString:@"575757"]
};
return [[NSAttributedString alloc] initWithString:title attributes:attributes];
}
返回的是NSAttributedString所以可以对其中的文字做处理。
2、设置空视图的图片
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView{
return ImageNamed(@"empty");
}
当tableView的数据源为空的时候就会显示
但是这样会有一个问题,那就是当你一进去的时候还没有发起请求的时候,tableView的数据源也是为空的,所以一进去也会显示空视图,所以这时候可以定义一个参数来标记是否已经请求网络。isFristLoding,在网络请求完成后设置isFristLoding = YES
所以在前面的两个代理中最上面加上if (!isFristLoding) { return nil; }
这样就会在请求网络后才显示
3、视图为空时是否可以滑动tableView和collectionView
- (BOOL)emptyDataSetShouldAllowScroll:(UIScrollView *)scrollView{ return YES; }
这个默认是NO所以需要实现下。
4、当有设置透视图时,空视图整体下移到减去透头视图的高度的中心
- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView{
return self.tableView.tableHeaderView.height/2;
}
这个也不止是因为头视图的原因实现的,当你需要设置空视图里面的内容位置的时候也可以使用
5、这个问题是我在项目中遇到的,不知道你们是不是有这个问题,那就是当你有数据的时候翻页后,在点击的筛选条件或者其他按钮重新获取数据且数据为空,这时候EmptyDataView的contenSize的高度也是和tableView的一样,是大于一屏幕的高度的,所以就会出现视图下移看不见,这时候就可以实现下面的代理,改变下tableView的contenSize,也就会改变EmptyDataView的。
- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView {
[self.tableView setContentOffset:CGPointMake(0, -self.tableView.contentInset.top)];
}
6、还有其他比较常用到的代理
设置空视图里面子视图的间距
- (CGFloat)spaceHeightForEmptyDataSet:(UIScrollView *)scrollView
空白页显示详细描述
- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView
空白页显示按钮
- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state
自定义页面
- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView