1

我有一个显示书籍列表的 tableView,每个表格单元格都包含“书籍名称”和“书籍描述”。单元格的高度由书籍描述的长度决定,因此单元格有不同的高度。

每个单元格也有一个背景图像,当然它会根据单元格的高度进行定型。

我正在单元格drawRect中绘制背景图像,如下所示:

- (void)drawRect:(CGRect)rect
{
    UIImage *bgImage = [UIImage imageNamed:@"cell_BG.png"];
    bgImage = [bgImage stretchableImageWithLeftCapWidth:60.0 topCapHeight:60.0];
    [bgImage drawInRect:rect];
} 

这段代码有效,问题是滚动性能,它不像我想要的那样流畅。
我注意到主要问题是高度变化,这似乎触发了对所有单元格的 drawRect 调用,包括可重复使用的单元格。
(当我尝试为所有单元格设置相同的高度时,滚动性能显着提高,但我必须使用动态高度......)

有没有更好的方法来做到这一点,所以表格滚动会得到改善?

4

1 回答 1

1

您可能不想覆盖 drawRectUITableViewCell的视图,因为 drawRect 非常昂贵。

尝试将 aUIImageView放在原型单元的顶部并设置其图像(您可以通过编程方式执行此操作,也可以直接拖入界面构建器)。然后,您可以设置图像视图的框架大小以匹配其各自的动态高度UITableViewCellUIImageView针对图像进行了优化,因此这种方法应该运行得更顺畅。

您可以在您的 cellforRowAtIndexPath 方法中设置 imageView 的图像和帧大小UITableViewController

更新:您可能还希望将内容模式设置为缩放并适合您的图像。

来自 UIView 类参考:“contentMode - 提供视图内容的布局行为,而不是视图的框架。此属性还影响内容如何缩放以适应视图以及是否缓存或重绘。”

例如,只要视图的框架发生变化,重绘就会调用 drawRect。

它可以通过编程方式设置:

UIView* view = [[UIView alloc] initWithFrame:CGRectMake...etc];
view.contentMode = UIViewContentModeRedraw; // for example

或者只是通过在界面构建器中选择视图并在属性检查器中设置内容模式属性。我认为您正在寻找 UIContentModeScaleToFit 或类似的东西。此外,如果使用界面生成器,请在尺寸检查器中检查 UIImageView 的支柱和弹簧。

于 2012-06-14T16:07:12.850 回答