美文网首页iOS技术专题iOS 开发好东西
使用DZNEmptyDataSet遇到的一个问题

使用DZNEmptyDataSet遇到的一个问题

作者: 天空中的球 | 来源:发表于2016-06-21 00:30 被阅读4140次

今天在使用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

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

正常 尺寸不对

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

尝试各种刷新都没有用

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

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

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

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

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

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

<DZNEmptyDataSetView: 0x7ffaabd50a50; 
frame = (0 -54; 414 672); 

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

<DZNEmptyDataSetView: 0x7ffaae347dc0; 
frame = (0 0; 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 上看到的方法,貌似是目前使用最合理的吧,有其他方法欢迎告知。

相关文章

网友评论

  • 跳跳虾:我的第一次进入页面还在请求数据的时候,就开始显示空白页了,怎么搞?
  • 听海听心:您好,我问一下,如果我的界面进入时就进行了刷新,然后如果我设置了空视图,导致正在下拉刷新的时候空视图也还存在,如何避免这种问题?
    天空中的球:@听海听心 初始化的时候啊,然后配合下代理就好了
    听海听心:@天空中的球 如何默认隐藏呢?
    天空中的球:默认是隐藏的就好了
  • Beyond无状态:楼主 我怎么自定义按钮的样式 就如你文中的test go again这个宽高怎么设置
    主角test:我自定义view 的时候,点击事件没了tapView,怎么处理?不改源码的情况下,怎么处理
    天空中的球:自定义时都是完全自定义的啊
  • tdt:emptyDataSetWillAppear这个可行,感谢。
  • 9a36ac8e14de:楼主,有个问题请教,customViewForEmptyDataSet
    自定义的视图显示不出来有什么办法解决吗?官方实例的小菊花控件倒是可以显示
    主角test:@雨泽Sunshine 看看,你自定义的view 是不是一个空的view,源码中重置了他的布局约束,你只要在空view 上加上一个图片类似就可以了
    雨泽Sunshine:同问,自定义的视图不显示
    9a36ac8e14de:在这个方法里不是不需要addSubView 吗,返回一下就行了,不是吗
  • 88fa1ca01da1:给tableView添加一个带轮播图的头部视图,轮播图存在的时候,cell数量为0,下面的提示页就不显示了,大神可以告诉我原因吗
    天空中的球:@MrD董 您好,那个是我早上测试官方 Demo 的,您可以试试那个官方。
    88fa1ca01da1:@天空中的球 我只是设置了代码self.mianTableView.emptyDataSetSource = self;
    self.mianTableView.emptyDataSetDelegate = self;然后实现了两个代理方法- (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView;- (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView;不不知道您做了什么设置
    天空中的球:是这样的,我刚才在其最新的代码中测试了下,发现是可以的
    你首先看下 DZNEmptyDataSetView 的是什么版本的,然后还有问题再对比下是不是你漏写了什么地方。
  • Dan1els:我遇到水平方向不居中的问题,这个问题偶尔会出现,暂时也用了你的方法,还不知道能不能解决,过一段时间再反馈
    a5714943d937:我返回一个自定义的View DZNEmptyDataSetView里面有一个子View 没有尺寸 导致自定义的View没有办法响应点击
  • 圣罗迦奈:- (void)emptyDataSetWillAppear:(UIScrollView *)scrollView {
    [UIView animateWithDuration:0.5 animations:^{
    scrollView.contentOffset = CGPointZero;
    }];
    }加个动画 好看些 感谢作者,解决了我心腹大患啊
    天空中的球:@圣罗迦奈 哦呢,加个动画
  • oneDemo:有没有更好的解决方法
    守护地中海的花:最后的那个方法不错哦
    天空中的球:@oneDemo 刚才又添加了一个方法,貌似比之前都合理些,你看看

本文标题:使用DZNEmptyDataSet遇到的一个问题

本文链接:https://www.haomeiwen.com/subject/ogvwdttx.html