从layoutSubviews访问上一个单元格

时间:2013-09-26 10:43:15

标签: ios objective-c xcode uitableview uiimageview

我已经创建了一个自定义的UITableViewCell类。在那个课程中,我根据里面的图像调整单元格的高度。

- (void)layoutSubviews {

    [super layoutSubviews];

    self.imageView.contentMode = UIViewContentModeScaleAspectFill;
    if (self.imageView.image) {
        self.frame = CGRectMake(self.frame.origin.x,self.frame.origin.y,             
        self.frame.size.width, self.imageView.image.size.height);
    }
}

但由于它们都是不同的高度,因此一些细胞相互重叠。

enter image description here

第一张图像的高度与默认的单元格高度相同,因此第二张图片很好。第二个图像具有较大的高度,这使得第三个图像位于其后面。

我可以以某种方式从layoutSubviews访问前一个单元格并从中调整y位置吗?

2 个答案:

答案 0 :(得分:1)

通过layoutSubviews代替tableView:heightForRowAtIndexPath:执行此操作,您的代码取决于副作用,并试图击败UITableView。您应该在tableView:heightForRowAtIndexPath:中修复此问题,让UITableView为您完成工作。

答案 1 :(得分:0)

而不是在方法中修复常量行高

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 65; //For example

}

在这种情况下,例如,你有一个数组,其中包含有序图像的名称(imageNamesArray),你可以使用这样的东西:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    CGFloat desiredImageWidth = 50.0f;

    UIImage *image = [UIImage imageNamed:[imageNamesArray objectAtIndex:indexPath.row]];

    CGFloat ratio = image.size.height/image.size.width;

    return desiredImageWidth * ratio;

}