美文网首页iOS-Developer-OC
iOS10.3 tableViewcell复用出现错乱

iOS10.3 tableViewcell复用出现错乱

作者: 锦鲤跃龙 | 来源:发表于2017-03-30 14:20 被阅读306次

    问题描述

    升级到iostableCell出现如下问题


    10.3.gif

    问题解决过程

    图层分析图

    从图层分析图可以看出 下面拉上来的contentView不见了
    查找代码发下

      [self.contentView addSubview:self.fouceOn];
    
      - (void)fouceOnF{
       
       [_fouceOn mas_makeConstraints:^(MASConstraintMaker *make) {
           make.centerY.mas_equalTo(self.contentView.mas_centerY);
           
           make.width.mas_equalTo(MasScale_1080(120));
           
           make.height.mas_equalTo(MasScale_1080(75));
           
           make.trailing.mas_equalTo(self.contentView.mas_trailing).offset(MasScale_1080(-46));
       }];
       
       
    }
    
    - (void)setContenViewF{
        
        
        [self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_equalTo(self);
            
            make.leading.mas_equalTo(self.mas_leading).offset(0);
            
            make.trailing.mas_equalTo(self.mas_trailing).offset(0);
            
            make.bottom.mas_equalTo(_imgView.mas_bottom).offset(MasScale_1080(62)).priority(600);
            
            
        }];
        
    }
    

    分析

    我的代码是采用 ios8以上的estimatedRowHeight属性来自适应高度的
    所有有最后一段代码。

    但是这个是根据内容来获取高度。因为复用的时候,contentView的约束会产生冲突,所以contentView没有显示出来。

    解决方法

     
        [self addSubview:self.fouceOn];
        
       
    

    让按钮放到self上,而不是contentView上,这样contentView的约束就有了

    反思

    PS采用estimatedRowHeight自适应高度的时候,最好

    1. tableIViewCell颜色和content颜色一致,这样即使contentView没有出来,也不会影响效果
    2. 若要里面要不同的view时,最好新添加一个view,把所要显示的内容放到这个view上
    3. 若要有多个内容依赖于contentView时,可以先以一个为准,然后其他的view添加到cell上,而不是contentView上。这样就不会产生contentView的约束冲突

    PS

    但是10.2就不会出现这个问题,10.3就有这个问题。目前10.3cell复用不知道有什么改动。若有小伙伴们知道10.3修改了什么,而导致这个结果。欢迎交流讨论。

    相关文章

      网友评论

        本文标题:iOS10.3 tableViewcell复用出现错乱

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