我正在努力解决以下问题: 我有一个TableViewController,其中每个单元格只有一个imageView。它使用 autolayout 设置单元格的contentView的边距,并将其设置为 aspectFit 。 我想要的是单元格的高度,以使其与imageView的高度相对应。 在第一个屏幕截图中,您会看到第一张图片的两边以及第二张图片的顶部(以及底部-第二张截图)的空白。
注意:我的图像的纵横比是可变的。
我已经设置好了,运气不好
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 300
这也在cellForRowAt中:
cell.setNeedsLayout()
cell.layoutIfNeeded()
任何建议都受到欢迎。
谢谢。
答案 0 :(得分:0)
您需要创建这些约束,此处的宽高比为3:1,您可以根据自己的需要进行更改,而且当您将contentMode设置为AspectFit时,真实图像也应具有相同的纵横比以完全拉伸
编辑:
如果方面是可变的,那么您需要这些约束
然后挂钩高度限制,并在从缓存下载/获取后在cellForRowAt
中进行操作
cell.imageHeight.constant = imageRealHeight * imageCellWidth / imageRealWidth
答案 1 :(得分:0)
这是由于图像视图返回其intrinsicContentSize
的方式。我目前认为这是一个错误,应予以更改。我为此举起了雷达。
当您使用.scaleAspectFit
将一个图像放入一个图像视图中并且在一个维度(宽度或高度)上受限制时。
然后它将按比例缩小图像。
因此,如果从300x300的图像开始,然后将其放入宽度限制为100的图像视图中,则将获得100点宽的图像视图。
但是,图像视图使用intrinsicContentSize
的未缩放图像,因此它将要高300点。
这是您现在面临的问题。
当前唯一的解决方法是计算图像的纵横比,并将其手动设置为对图像视图的约束。
所以您可能会有这样的一行...
imageView.image = theImage
您可以添加到其中以添加宽高比约束...
imageView.heightAnchor.constraint(equalTo: imageView.widthAnchor, multiplier: image.size.height / image.size.width).isActive = true
当然,您还需要删除已经添加的所有约束。或者可能将约束创建为单元格的属性,等等。