我已经创建了一个自定义的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);
}
}
但由于它们都是不同的高度,因此一些细胞相互重叠。
第一张图像的高度与默认的单元格高度相同,因此第二张图片很好。第二个图像具有较大的高度,这使得第三个图像位于其后面。
我可以以某种方式从layoutSubviews访问前一个单元格并从中调整y位置吗?
答案 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;
}