当前位置: 首页 > 面试题库 >

Swift-基于图像宽高比的动态UITableViewCell大小

段曦
2023-03-14
问题内容

我正在尝试创建动态大小的UITableViewCells,根据从服务器下载的图像的长宽比更改高度。

例如,如果图像的高度是其宽度的两倍,我希望UITableViewCell的高度是屏幕宽度的两倍,以便图像可以占据屏幕的整个宽度并保持宽高比。

我试图做的是在单元格中添加约束,并使用UITableViewAutomaticDimension来计算高度,但是我面临的问题是,在下载图像之前,我不知道图像的纵横比,因此单元格开始了较小,然后手动刷新tableView时,单元格将以正确的大小显示。

我不希望在下载图像时重新加载每个单元都是执行此操作的好方法。

这种方法是最好的方法吗?我一生无法思考该怎么做,因为在初始化单元时,我不知道单元格内部的宽高比。


问题答案:

为此,我首先使用字典[Int:CGFloat]来保留计算出的单元格高度,然后在heightForRowAtIndexpath方法中使用字典中保留的值,在cellForRowAtIndexpath方法中,您应该下载图像,计算纵横比,将单元格宽度或图像宽度乘以您的长宽比,并将计算出的高度放到字典中相应的IndexPath号中

在类似这样的代码中,这是使用alamofire加载图像的代码示例

    var rowHeights:[Int:CGFloat] = [:] //declaration of Dictionary


    //My heightForRowAtIndexPath method
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if let height = self.rowHeights[indexPath.row]{
            return height
        }else{
            return defaultHeight
        }
    }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

if let cell = tableView.dequeueReusableCell(withIdentifier: "ImageCell") as? ImageCell
        {
        let urlImage = Foundation.URL(string: "http://imageurl")
        cell.articleImage.af_setImage(withURL: urlImage, placeholderImage: self.placeholderImage, filter: nil, imageTransition: .crossDissolve(0.3), completion: { (response) in

            if let image = response.result.value{
                DispatchQueue.main.async {

                    let aspectRatio = (image! as UIImage).size.height/(image! as UIImage).size.width
                    cell.articleImage.image = image
                    let imageHeight = self.view.frame.width*aspectRatio
                    tableView.beginUpdates()
                    self.rowHeights[indexPath.row] = imageHeight
                    tableView.endUpdates()

                }
            }
        })
        }

我希望这有帮助



 类似资料:
  • 问题内容: 我的图片尺寸会很大,我想使用jQuery缩小图片,同时保持比例不变,即长宽比相同。 有人可以指出一些代码或解释其逻辑吗? 问题答案: 看看来自的这段代码

  • DynamicHeights是一个动态表格元素高度(动态TableViewCell)的例子。实际应用场景在iOS开发中会经常遇到不规律的TableViewCell,往往需要根据内容的多少而动态调整这些Cell的大小。在http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ 中,有详细的解说开发的流程以及这么处理的原因。里面的大

  • 问题内容: 我正在处理图像,但遇到宽高比问题。 如您所见,并且已经指定。我为图像添加了CSS规则: 但是,我收到和。如何设置图像以调整尺寸,同时保持其纵横比。 img { 如果对于指定区域太大,则会缩小图像(不利的一面是,不会放大图像)。

  • 问题内容: 是否有可能用图像 填充 div,使得至少一个图像尺寸为100%,另一个尺寸与div相比更宽或相等,同时还要考虑图像的长宽比。 一个示例可以使用这些类,如下所示: 我正在寻找一种纯HTML + CSS解决方案,该解决方案适用于响应矩形(不一定是正方形)的div。由于这个特殊原因,Javascript会很痛苦,因为需要确定每次调整大小时宽度或高度是否应为100%。服务器端甚至都不是一个选择

  • 问题内容: 我正在使用Bootstrap创建轮播,我的图像很大,因此当屏幕小于图像时,不会保持该比例。 我该如何改变? 这是我的代码: 我需要图片适合100%的宽度,但要保持其500px的高度(我认为是500px),这意味着在较小的屏幕上我们看不到图片的最左侧和最右侧。 我尝试将图像包含在div中并添加 但这不起作用 谢谢! 问题答案: 问题在于引导CSS: 设置图像不会超过视口。您需要在CSS上

  • 问题内容: 使用CSS flex box模型,如何强制图像保持其纵横比? JS小提琴:http://jsfiddle.net/xLc2Le0k/2/ 请注意,图像会拉伸或收缩以填充容器的宽度。很好,但是我们也可以拉伸或缩小 高度 以保持图像比例吗? 的HTML 的CSS 问题答案: 对于img标签,如果您定义一侧,那么将调整另一侧的大小以保持纵横比,并且默认情况下,图像会扩展到其原始大小。 使用此