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;
}
实现效果却如下图
查看图层,原本中间的图案跑到了最下面
层级关系
这个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;
}
搞定