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

实现效果却如下图


iOS DZNEmptyDataSet 自定义视图的一个小坑_第1张图片
WechatIMG50.jpeg

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


iOS DZNEmptyDataSet 自定义视图的一个小坑_第2张图片
1515565709744.jpg

层级关系


iOS DZNEmptyDataSet 自定义视图的一个小坑_第3张图片
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;
}

搞定


iOS DZNEmptyDataSet 自定义视图的一个小坑_第4张图片
image.png

你可能感兴趣的:(iOS DZNEmptyDataSet 自定义视图的一个小坑)