gpt4 book ai didi

iphone - UITableViewCell 具有背景图像和动态高度

转载 作者:行者123 更新时间:2023-11-29 04:36:11 25 4
gpt4 key购买 nike

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

每个单元格还有一个背景图像,当然会根据单元格的高度进行淀粉化。

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

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

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

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

最佳答案

您可能不想为 UITableViewCell 的 View 覆盖drawRect,因为drawRect 非常昂贵。

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

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

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

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

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

可以通过编程方式设置:

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

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

关于iphone - UITableViewCell 具有背景图像和动态高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11036900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com