如何避免 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 中的图像大小变化的主要内容,如果未能解决你的问题,请参考以下文章
UITableVIewCell 错误 Xcode 7 / Swift 2
将 Swift 添加到项目中会大大增加规模。如何以及何时可以避免
如何避免在带有 Swift 4 的 iOS 11 中使用带有刷新控件的 @objc?