0

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

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

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

如果您需要查看更多代码,请告诉我。我不确定其他是否相关。

表视图控制器

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
}
4

2 回答 2

0

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

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

希望这可以帮助。

于 2015-07-31T16:31:22.273 回答
0

如果你想保持纵横比,你必须像这样UIImageView实现 heightForRow 函数UITableViewDelegate

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
}
于 2015-07-31T23:06:28.287 回答