使用DZNEmptyDataSet遇到的一个问题

今天在使用DZNEmptyDataSet遇到了一个问题,就是我用Refresh 后DZNEmptyDataSet View的整个背景尺寸不对。
ps: DZNEmptyDataSet是一个相当不错设置空白页面的轮子。

无论是用自定义

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

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

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

对比图片,不看内容,看空白的的地方

使用DZNEmptyDataSet遇到的一个问题_第1张图片
正常
使用DZNEmptyDataSet遇到的一个问题_第2张图片
尺寸不对

简单的说问题是:刷新后DZNEmptyDataSetView 还会向上偏移一段距离!
此处遇到这个问题,我先想的是 MJRefresh的问题吗?当我换成 UIRefreshControl的时候,效果还是一样。

尝试各种刷新都没有用

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

然后就接着就去看源码啦,然后转了一大圈,还是没能解决,暂时只能笔记到此。

先用一个鸡贼的方法,将DZNEmptyDataSetView的背景颜色和 tableView 的背景颜色一致就 OK 了

- (UIColor *)backgroundColorForEmptyDataSet:(UIScrollView *)scrollView

或者直接设置 self.tableView 或 self.view.backgroundColor这样啦。

当然真正治标的方法,······, 求助啊
从pviews打印得到

重点是 frame = (0 -54; 414 672); 因为正常下是这样的

换一种说法就是如何在refresh 之后,保持其origin不变化,或者说是什么原因导致其origin 变化啦。

然后我一搜 54 ,发现54出现地方并不多,结合刷新猜测应该就是它啦

const CGFloat MJRefreshHeaderHeight = 54.0;

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

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

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);
    }
}

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

再次更新添加一方法:

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

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

你可能感兴趣的:(使用DZNEmptyDataSet遇到的一个问题)