iOS DZNEmptyDataSet 自定义视图的一个小坑

DZNEmptyDataSet 主要用于 UITableView 以及 UICollectionView 页面空白时展示(也包括UIScrollView)。

项目中应用到此第三方,且用到了自定义视图,即实现以下代理方法

- (UIView *)customViewForEmptyDataSet:(UIScrollView *)scrollView {
    return self.emptyView;
}

EmptyView:

- (TJMEmptyView *)emptyView {
    if (!_emptyView) {
        self.emptyView = [[[NSBundle mainBundle] loadNibNamed:@"TJMEmptyView" owner:self options:nil] firstObject];
        _emptyView.frame = CGRectMake(0, 0, SCREENWIDTH, SCREENHEIGHT);
    }
    return _emptyView;
}

实现效果却如下图


WechatIMG50.jpeg

查看图层,原本中间的图案跑到了最下面


1515565709744.jpg

层级关系


image.png

这个imageView的父视图 EmptyView,及EmptyView的父视图 高度都为0。
翻到源码中查看:
if (_customView) {
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView]|" options:0 metrics:nil views:@{@"customView":_customView}]];
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[customView]|" options:0 metrics:nil views:@{@"customView":_customView}]];
    }

_customView 即 我自定义的 EmptyView ,contentView 即 EmptyView的父视图。contentView使用NSLayoutConstraint 布局,高度依赖于 EmptyView 的高度,未增加约束时,自然为0,代码增加一条:

- (TJMEmptyView *)emptyView {
    if (!_emptyView) {
        self.emptyView = [[[NSBundle mainBundle] loadNibNamed:@"TJMEmptyView" owner:self options:nil] firstObject];
        NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:_emptyView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:TJMScreenHeight];
        [_emptyView addConstraint:heightConstraint];
    }
    return _emptyView;
}

搞定


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容