我在Main.storyboard中定义UIImageView
,在UITableViewCell
内,我希望它根据屏幕大小更改其宽度,我希望它改变高度,使其宽高比为与UIImage
相同。
(例如FB应用中的新闻提要 - 图像的宽度始终相同,但根据原始宽高比不同,高度不同。)
我尝试了以下选项(基于其他SO问题):
设置尾随,前导,下限,顶部约束(全部= 8)
UIImageView
中的一个UITableView
似乎具有正确的尺寸与上述相同,加上UIImageView.frame
UIImageView.frame = CGRect(...)
这有助于: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.reloadData()
再次为了期望的结果。
那么,推荐的方法是什么?
OT:这种行为(不希望的内容和属性的变化)是相当普遍的,我也在着色Pins(地图中的注释标记)时体验过它。当我移动地图以便在屏幕上看不到引脚并向后移动时,引脚会切换颜色(wtf)。也许有一种更通用的方法来处理所有这些类似的事情?
答案 0 :(得分:0)
问题在于我在启动单元格时从网上下载图像,并在重新使用时再次下载图像。
仅将单元格内容加载一次并存储它们就解决了问题。
另一种方法是计算细胞含量高度并在heightForRowAt indexPath
定义它们。