使用DZNEmptyDataSet时DZNEmptyDataSetView自动上移

使用DZNEmptyDataSet遇到的一个问题

今天在使用DZNEmptyDataSet遇到了一个问题,就是我用MJRefresh 后DZNEmptyDataSet View的整个背景尺寸不对。

ps: DZNEmptyDataSet是一个相当不错设置空白页面的轮子非常 好使 。

无论是用自定义

1
- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView

还是直接用 DZNEmptyDataSet 推荐的方式直接设置都是有问题的

1
2
3
- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView;
- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView
- (NSAttributedString *)buttonTitleForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state

看看问题的具体表现吧

正常的图片

下边这个就是 有问题了,没数据后自动上移了

非正常图片

简单的说问题是:刷新后DZNEmptyDataSetView 还会向上偏移一段距离!

尝试各种刷新都没有用

1
2
[self.tableView reloadEmptyDataSet];
[self.tableView reloadData];

看了下视图的层次关系

层次关系图
可以看出了DZNEmptyDataSetView上移了54,然后我一搜 54 ,发现54出现地方并不多,结合刷新猜测应该就是它啦

1
const CGFloat MJRefreshHeaderHeight = 54.0;

所以推测,DZNEmptyDataSetView是根据正在刷新的过程中给其定布局的。然而我们需要阻止它或延后它。

此处我是想着在这之后直接处理它,改变它的 origin。

1
2
3
4
5
6
for (UIView *subView in self.tableView.subviews) {
if ([NSStringFromClass([subView class]) isEqualToString:@"DZNEmptyDataSetView"]){
if (subView.frame.origin.y == 0) return;
subView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64);
}
}

在刷新后这样处理,方法有点死,但是相对来说比较直接的。

从 github 上看到的方法如下,貌似是目前使用最合理的吧,有其他方法欢迎告知。

1
2
3
- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView {
scrollView.contentOffset = CGPointZero;
}