2018-06-01 masonry布局的cell tabl
2018-06-01 本文已影响0人
惊蛰_e3ce
tableviewcell是用masonry布局
图片.png 滑到底部时要求灰色条部分刚好停在相应位置 需要计算 点击 图片.png 时1:tableview需要要产生的偏移量needOffset
2:以及tableview正常情况下的偏移量 originOffset(contentsize - tableheight);
3:将originOffset和needoffset的差值作为 tableview的contentinset的bottom
4:这时候重点是获取到contengsize
5:但是tableview的contentsize一直获取的不准确 needlayout也不行 tableview滑动过程中contentsize还会改变
没办法只能用kvo
6:但是这个界面比较特殊
7:collectionview的高度 是tableview的contentinset的top 全要在数据下发后才能准确计算 bottom要计算差值 用kvo小屏(5s se等会闪退 6等不会 查不出什么原因导致) 图片.png 堆栈显示 是死循环 添加的kvo和 图片.png mjrefresh的监听offset的kvo死循环(大屏不会贼奇怪)
8:解决方法
pragma mark kvo
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
CGSize oldSize = [change[NSKeyValueChangeOldKey] CGSizeValue];
CGSize newSize = [change[NSKeyValueChangeNewKey] CGSizeValue];
if (object == _tableView && [keyPath isEqualToString:@"contentSize"] && [_tableView superview] && !CGSizeEqualToSize(oldSize,newSize)) {
[self changeTableInsets];
}
}
9:大量测试发现 oldsize和newsize相同 没变化还走kvo CGSizeEqualToSize(oldSize,newSize)这个判断很重要 只是针对现象解决 没查到原因
10:随数据源更改contentinset的时候会调用 didscrollview方法 导致抖动