Swift UITableViewCell内UIImageView的动态大小
我在Main.storyboard中定义了一个Swift UITableViewCell内UIImageView的动态大小,swift,uitableview,swift3,uiimageview,constraints,Swift,Uitableview,Swift3,Uiimageview,Constraints,我在Main.storyboard中定义了一个UIImageView,在UITableViewCell中,我希望它根据屏幕大小改变宽度,并改变高度,使其纵横比与UIImage相同 (例如FB应用程序中的新闻提要–图像总是具有相同的宽度,但根据其原始纵横比不同的高度) 我尝试了以下选项(基于其他SO问题): 设置尾随、前导、底部和顶部约束(全部=8) (我的单元格根据其内容扩展其高度) UITableView中的一个UIImageView似乎大小正确 其他图像的上方和下方都有巨大的空白 这个空白
UIImageView
,在UITableViewCell
中,我希望它根据屏幕大小改变宽度,并改变高度,使其纵横比与UIImage
相同
(例如FB应用程序中的新闻提要–图像总是具有相同的宽度,但根据其原始纵横比不同的高度)
我尝试了以下选项(基于其他SO问题):
- (我的单元格根据其内容扩展其高度)
中的一个UITableView
似乎大小正确UIImageView
- 其他图像的上方和下方都有巨大的空白
- 这个空白似乎随着滚动而增加
UIImageView.frame
- 最常见的建议可能是更改
UIImageView.frame=CGRect(…)
- 图像视图忽略了这些说明,并且所有单元格或单元格中的所有图像视图的大小仍然相同
- 图像视图在那里放置了一些随机高度,并且在图像下方有大量空白
- 它适用于许多图像,但有些图像上下仍有空白+肖像(“高大”图片)左右都有空白
- 这两种情况都可以通过大力调用
直到显示正确的大小来解决tableView.reloadData()
- 滚动浏览tableView会把一切都搞砸
tableView.reloadData()
,以获得所需的结果
那么,推荐的方法是什么
OT:这种行为(内容和属性的意外更改)非常常见,我在给图钉(地图中的注释标记)上色时也经历过这种情况。当我移动地图使插脚在屏幕上不可见并向后移动时,插脚切换颜色(wtf)。也许有一种更通用的方法来处理所有这些类似的事情?问题是,当细胞启动时,我从网络上下载图像,而当它们被重新使用时,我又从网络上下载图像 只加载一次单元格内容并存储它们就解决了问题 另一种方法是计算单元格内容高度,并将其定义为
heightForRowAt indexPath
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)