我有一个从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
}
答案 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
}