1粱哼,當(dāng)collectionview設(shè)置的有inset的時候季二,如果collectionview向上滑動一段距離,也就是contentoffset很大的時候揭措,然后刷新collectionview胯舷,如果刷新后的contentsize小于一個屏幕的高度,EmptyDataSet的內(nèi)容會出現(xiàn)位置變動
通過查看視圖層次結(jié)構(gòu)蜂筹,發(fā)現(xiàn)EmptyDataSetview的頂部距離scrollview的頂部有一段距離需纳,并且距離并不固定(視更新前后的contentsize而定),然后翻看源碼艺挪,在它更新約束的地方不翩,重新設(shè)置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](它給內(nèi)部視圖重新設(shè)置約束之前)麻裳,用masonry給自己更新約束
1月29日更新
但是今天發(fā)現(xiàn)項(xiàng)目中有使用mj的下拉刷新口蝠,mj會改變scrollview的contentinset,所以這種發(fā)放就不行了津坑,于是給scrollview設(shè)置了一個header妙蔗,不適用上邊的方法,解決了問題