【发布时间】:2017-02-24 12:25:04
【问题描述】:
我在 Main.storyboard 中定义了一个 UIImageView,在 UITableViewCell 内,我希望它根据屏幕尺寸改变其宽度,我希望它改变高度,使其纵横比与UIImage。
(例如 FB 应用程序中的新闻提要 - 图像始终具有相同的宽度,但根据其原始纵横比的不同高度)。
我尝试了以下选项(基于其他 SO 问题):
-
设置尾随、前导、底部、顶部约束(全部 = 8)
- (我的单元格根据其内容扩展高度)
-
UITableView中的一个UIImageView似乎大小正确 - 其他图片在图片上方和下方有大量空白
- 这个空白区域似乎随着滚动而增加
-
同上,加
UIImageView.frame- 最常见的建议可能是更改
UIImageView.frame = CGRect(...) - Image View 忽略了这些说明,并且所有单元格中的所有 Image View 的大小仍然相同,或者
- Image View 在那里放置了一些随机高度,并且图像下方有大量空白
- 最常见的建议可能是更改
-
这有帮助: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