美文网首页
2018-06-01 masonry布局的cell tabl

2018-06-01 masonry布局的cell tabl

作者: 惊蛰_e3ce | 来源:发表于2018-06-01 16:34 被阅读0次

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方法 导致抖动

相关文章

网友评论

      本文标题:2018-06-01 masonry布局的cell tabl

      本文链接:https://www.haomeiwen.com/subject/yksksftx.html