第四个UITableViewCell重用第一个单元格的高度

时间:2015-07-31 16:17:20

标签: ios swift uitableview tableviewcell reuseidentifier

我有一个从Parse中检索图像的TableView。图像宽高比不同。我进行了设置,以便更改图像的宽度以匹配用户设备的宽度,并调整高度以匹配宽高比。

我的问题是,每当我运行应用程序时,前三个单元格运行良好,但第四个单元格只从第一个单元格获取高度,因此图像具有信箱效果。与第五和第六单元格相同,等等(第五个取第二个高度,第六个取第三个高度,第七个取第四个高度,第一个,等等)。

解决此问题的最佳方法是什么?

如果您需要查看比此更多的代码,请告诉我们。我不确定是否还有其他相关内容。

TableViewController

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! HomeScreenTableViewCell

    tableView.estimatedRowHeight = 100
    tableView.rowHeight = UITableViewAutomaticDimension

    //image retrieved from Parse
    imageFiles[indexPath.row].getDataInBackgroundWithBlock { (data, error) -> Void in
        if let downloadedImage = UIImage(data: data!)
        {
            cell.postedImage.image = downloadedImage
        }

    }

    cell.postId = postId[indexPath.row]
    cell.username.text = usernames[indexPath.row]
    cell.delegate = self
    return cell
}

2 个答案:

答案 0 :(得分:0)

您是否正在实施heightForRowAtIndexPath方法?由于您具有可变高度,因此您还必须实现该方法,以便每当创建或重用新单元格时,都会设置正确的高度。 您可以将所有高度存储在数组中,或者从Parse返回的数组图像中获取它。 在Objective C中它会是这样的,但我很确定你也可以在Swift上做到这一点。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return images[indexPath.row].height;
}

希望这有帮助。

答案 1 :(得分:0)

如果你想保持UIImageView的宽高比,你必须在UITableViewDelegate这样实现heightForRow函数

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
  //imageView original width is 320
  //imageView original height is 200
  let screenWidth = UIScreen.mainScreen().bounds.width
  return (screenWidth * 200) / 320
}