美文网首页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