UITableViewCell

时间:2017-02-24 12:25:04

标签: swift uitableview swift3 uiimageview constraints

我在Main.storyboard中定义UIImageView,在UITableViewCell内,我希望它根据屏幕大小更改其宽度,我希望它改变高度,使其宽高比为与UIImage相同。

(例如FB应用中的新闻提要 - 图像的宽度始终相同,但根据原始宽高比不同,高度不同。)

我尝试了以下选项(基于其他SO问题):

  1. 设置尾随,前导,下限,顶部约束(全部= 8)

    • (我的细胞根据其含量扩大其高度)
    • UIImageView中的一个UITableView似乎具有正确的尺寸
    • 其他图像在图像上方和下方都有大量的空白区域
    • 此空白区域似乎随着滚动而增加
  2. 与上述相同,加上UIImageView.frame

    • 最常见的建议可能是改变UIImageView.frame = CGRect(...)
    • 图像视图忽略了这些说明,并且所有单元格中的所有图像视图的大小仍然相同或
    • 图像视图在那里放置了一些随机高度,并在图像下方留下了大量的空白区域
  3. 这有助于:How do i scale an image correctly with fixed width and auto layout?

    let aRatio = (image?.size.width)! / (image?.size.height)!
    cell.myImageView?.contentMode = .scaleAspectFit
    let aRatioConstraint = NSLayoutConstraint(item: cell.myImageView, 
                                                    attribute:  NSLayoutAttribute.width, 
                                                    relatedBy: NSLayoutRelation.equal, 
                                                    toItem: cell.myImageView,
                                                    attribute: NSLayoutAttribute.height, 
                                                    multiplier: aRatio, 
                                                    constant: 0.0)
    cell.myImageView?.addConstraint(aRatioConstraint)
    
    • 它适用于很多图像,但有些图像仍然有上下白色空间+肖像(“高大”图片)左右有白色空格。
    • 这两种情况都可以通过大力调用tableView.reloadData()来解决,直到出现正确的大小。
    • 滚动浏览表格查看所有内容。
  4. 我尝试了很多方法(例如添加高度限制而不是直接操作框架),但是所有内容都归结为两件事:滚动时出现奇怪的空白和/或问题,因此必须再次触发tableView.reloadData()再次为了期望的结果。

    那么,推荐的方法是什么?

    OT:这种行为(不希望的内容和属性的变化)是相当普遍的,我也在着色Pins(地图中的注释标记)时体验过它。当我移动地图以便在屏幕上看不到引脚并向后移动时,引脚会切换颜色(wtf)。也许有一种更通用的方法来处理所有这些类似的事情?

1 个答案:

答案 0 :(得分:0)

问题在于我在启动单元格时从网上下载图像,并在重新使用时再次下载图像。

仅将单元格内容加载一次并存储它们就解决了问题。

另一种方法是计算细胞含量高度并在heightForRowAt indexPath定义它们。