1,当collectionview设置的有inset的时候,如果collectionview向上滑动一段距离,也就是contentoffset很大的时候,然后刷新collectionview,如果刷新后的contentsize小于一个屏幕的高度,EmptyDataSet的内容会出现位置变动
通过查看视图层次结构,发现EmptyDataSetview的顶部距离scrollview的顶部有一段距离,并且距离并不固定(视更新前后的contentsize而定),然后翻看源码,在它更新约束的地方,重新设置EmptyDataSetview的约束,使其位置正确
// Configure empty dataset fade in display
view.fadeInOnDisplay = [self dzn_shouldFadeIn];
// UIScrollView *scroll = (UIScrollView *)self.superview;
[self.emptyDataSetView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self).offset(-self.contentInset.top);
make.left.equalTo(self);
make.width.equalTo(self.mas_width);
make.height.equalTo(self.mas_height);
}];
[view setupConstraints];
[UIView performWithoutAnimation:^{
[view layoutIfNeeded];
}];
上边代码是框架中- (void)dzn_reloadEmptyDataSet 的代码
在 [view setupConstraints](它给内部视图重新设置约束之前),用masonry给自己更新约束
1月29日更新
但是今天发现项目中有使用mj的下拉刷新,mj会改变scrollview的contentinset,所以这种发放就不行了,于是给scrollview设置了一个header,不适用上边的方法,解决了问题
网友评论