为啥当我滚动我的 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】:发生这种情况是因为您应该先从单元格中清除以前的数据,然后才能重复使用它。
在TVcell
class 中,您应该覆盖方法prepareForReuse
,并将标签和图像视图中的所有数据设置为零。
【讨论】:
sd_setImageWithURL 自动为图像执行此操作。在布局之前设置标签。所以,不需要手动清除数据。以上是关于为啥当我滚动我的 tabelview 单元格时我的 imageview 正在缩小?的主要内容,如果未能解决你的问题,请参考以下文章
添加具有行动画的单元格时,将 tableview 保持在相同的滚动位置