如何避免Swift中UITableViewController的UIImageView中的图像大小更改

时间:2016-11-08 21:18:06

标签: ios uitableview uiimageview

我正在使用UITableViewController来显示扑克牌行。我已经将模式设置为“Aspect Fit”,并且我已经在Storyboard中检查了每个行的单元格中的ImageView,其ContentView父级以及包含ContentView的Cell的“剪辑子视图”。

当表最初显示时,所有内容都按预期显示,但是当我滑动滚动表时,滚动到视图中的一些(不是全部)新行的图像缩放到错误的大小,如图所示。

Images in some rows end up smaller than expected

似乎如果我快速拖动,我会得到更多大小错误的行。如果我慢慢拖动,所有新行都会适当缩放。当我使用不同的模拟器时,不正确的缩放会使一些图像太大而不是太小,因此整行卡片都不适合显示器。

Some rows have images too big to fit

在代码中,我设置了contentMode和clipToBounds,但它们似乎没有帮助:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("LineCell", forIndexPath: indexPath)

    let index = indexPath.row % 4
    let imagename = "cards\(index)"
    let im = UIImage(named: imagename)

    cell.contentMode = UIViewContentMode.ScaleAspectFit
    cell.clipsToBounds = true
    cell.contentView.contentMode = UIViewContentMode.ScaleAspectFit
    cell.contentView.clipsToBounds = true
    cell.imageView?.contentMode = UIViewContentMode.ScaleAspectFit
    cell.imageView?.clipsToBounds = true
    cell.imageView?.image = im

    return cell
}

我错过了一些明显的东西吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我最终使用编程方式解决了这个问题。

    let cellImage : UIImageView = UIImageView(frame: CGRectMake(0, 0, cell.bounds.size.width, cell.bounds.size.height))
    cellImage.contentMode = UIViewContentMode.ScaleAspectFit
    cellImage.clipsToBounds = true
    cellImage.image = im
    cell.addSubview(cellImage)

我仍然希望通过故事板找到一种方法来实现它,我记得曾经以简单明了的方式工作......回到Apple开始推出各种形状和尺寸的设备之前,他们需要提供在基于约束的半自动化系统中适应所有尺寸的日益复杂的方法,即使对于最简单的任务也需要相当多的开销。但是,就目前而言,这样做。