如何避免 Swift 中 UITableViewController 的 UIImageView 中的图像大小变化

Posted

技术标签:

【中文标题】如何避免 Swift 中 UITableViewController 的 UIImageView 中的图像大小变化【英文标题】:How to avoid image size changes in UIImageView of UITableViewController in Swift 【发布时间】:2016-11-08 21:18:05 【问题描述】:

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

最初显示表格时,一切看起来都符合预期,但是,当我滑动滚动表格时,滚动到视图中的一些(不是全部)新行的图像缩放到错误的大小,如图所示。

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

在代码中,我设置了 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

我错过了什么明显的东西吗?谢谢!

【问题讨论】:

您在单元格中设置了哪些限制条件? 我已将间距为 0 的 ImageView 固定到最近的邻居(不受边距限制)。 开启。是左是右? 我已经确定了所有四个方面。 【参考方案1】:

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

    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)

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

【讨论】:

以上是关于如何避免 Swift 中 UITableViewController 的 UIImageView 中的图像大小变化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Swift添加Table View搜索框

UITableVIewCell 错误 Xcode 7 / Swift 2

将 Swift 添加到项目中会大大增加规模。如何以及何时可以避免

如何避免在带有 Swift 4 的 iOS 11 中使用带有刷新控件的 @objc?

Swift - 使用 UITableViewController 创建子菜单

swift项目第二天:初始化项目