2018-06-01 masonry布局的cell tableview的contentize获取不准确

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:但是这个界面比较特殊

图片.png
信用 认证等都是可能有可能无 我的信用假导航要求吸顶
图片.png
刷新效果要求在中间出现 而不是顶部
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方法 导致抖动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容