【问题标题】:Dynamic size of UIImageView inside UITableViewCellUITableViewCell 内 UIImageView 的动态大小
【发布时间】:2017-02-24 12:25:04
【问题描述】:

我在 Main.storyboard 中定义了一个 UIImageView,在 UITableViewCell 内,我希望它根据屏幕尺寸改变其宽度,我希望它改变高度,使其纵横比与UIImage

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

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

  1. 设置尾随、前导、底部、顶部约束(全部 = 8)

    • (我的单元格根据其内容扩展高度)
    • UITableView 中的一个 UIImageView 似乎大小正确
    • 其他图片在图片上方和下方有大量空白
    • 这个空白区域似乎随着滚动而增加
  2. 同上,加UIImageView.frame

    • 最常见的建议可能是更改UIImageView.frame = CGRect(...)
    • Image View 忽略了这些说明,并且所有单元格中的所有 Image View 的大小仍然相同,或者
    • Image View 在那里放置了一些随机高度,并且图像下方有大量空白
  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() 来解决,直到出现正确的大小。
    • 在 tableView 中滚动会搞砸一切。

我尝试了更多方法(例如,添加高度限制而不是直接操作框架),但一切都归结为两件事:奇怪的空白和/或滚动时出现问题,因此需要一次又一次地触发 tableView.reloadData()得到想要的结果。

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

OT:这种行为(内容和属性的意外更改)相当普遍,我在为 Pin 图(地图中的注释标记)着色时也遇到过这种情况。当我移动地图以使大头针在屏幕上不可见并向后移动时,大头针会切换颜色(wtf)。也许有一种更通用的方法来处理所有这些类似的事情?

【问题讨论】:

    标签: swift uitableview swift3 uiimageview constraints


    【解决方案1】:

    问题是我在启动单元格时从网络下载图像,然后在重新使用它们时再次下载。

    只下载一次单元格内容并存储它们解决了这个问题。

    另一种方法是计算单元格内容高度并将它们定义为heightForRowAt indexPath

    【讨论】:

      猜你喜欢
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      相关资源
      最近更新 更多