为啥当我滚动我的 tabelview 单元格时我的 imageview 正在缩小?

Posted

技术标签:

【中文标题】为啥当我滚动我的 tabelview 单元格时我的 imageview 正在缩小?【英文标题】:why my imageview is shrinking while im scrolling my tabelview cells?为什么当我滚动我的 tabelview 单元格时我的 imageview 正在缩小? 【发布时间】:2016-07-11 11:33:53 【问题描述】:

我正在动态调整标签的大小,该标签位于我的 tabelview 单元格中。出现在视图中的单元格数量很好。但是当我滚动新单元格时,图像视图的尺寸很大。请告诉我。为什么?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
   static NSString *CellIdentifier = @"cell";

   TVcell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
   if (cell == nil)
   cell = [[TVcell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   cell.titleLabel.text = [[[arrayData objectAtIndex:indexPath.row]valueForKey:@"title"]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
   cell.txtlabel.text = [[[arrayData objectAtIndex:indexPath.row] valueForKey:@"description"]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
   cell.IMGLabel.contentMode = UIViewContentModeScaleAspectFill;
   [cell.IMGLabel sd_setImageWithURL:[NSURL URLWithString:[enclosureUrlArray objectAtIndex:indexPath.row]]
                      placeholderImage:[UIImage imageNamed:@"placeholder"] options:indexPath.row == 0 ? SDWebImageRefreshCached : 0];
    [cell.IMGLabel.layer setMasksToBounds:YES];
    [cell.IMGLabel.layer setCornerRadius:2.5f];
    [cell setNeedsLayout];
    return cell;

【问题讨论】:

【参考方案1】:

    dequeueReusableCellWithIdentifier: forIndexPath: 从不返回 nil,所以删除

    if (cell == nil) cell = [[TVcell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    注意,UITableViewCell 中的 setCornerRadius 会使滚动不流畅。使用 Core Graphics 更好地准备带有圆角的图像。

    [cell setNeedsLayout]; - UITableviewCell 会自动布局单元格视图,所以它是多余的。

    如果你使用 Self Sizing Cell 你应该在 ViewDidLoad 中设置:

    tableView.estimatedRowHeight = 85.0; tableView.rowHeight = UITableViewAutomaticDimension;

【讨论】:

我仍然遇到同样的问题 您是否使用了 Self Sizing Cell? 据我了解,您希望单元格更改高度取决于图像高度? 如果是,则需要创建imageView的高度约束出口,并在代码中根据图像高度进行更改【参考方案2】:

发生这种情况是因为您应该先从单元格中清除以前的数据,然后才能重复使用它。

TVcellclass 中,您应该覆盖方法prepareForReuse,并将标签和图像视图中的所有数据设置为零。

【讨论】:

sd_setImageWithURL 自动为图像执行此操作。在布局之前设置标签。所以,不需要手动清除数据。

以上是关于为啥当我滚动我的 tabelview 单元格时我的 imageview 正在缩小?的主要内容,如果未能解决你的问题,请参考以下文章

触摸时我的表格单元格不会立即突出显示

添加具有行动画的单元格时,将 tableview 保持在相同的滚动位置

当我开始水平滚动时,为啥我的收藏视图中的单元格被取消选择?

为啥当键盘弹出时我的 UIScrollView 滚动错误?

为啥我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?

滚动时collectionview更改单元格背景图像