iphone – iOS:为UITableView预先计算行高

iphone – iOS:为UITableView预先计算行高,第1张

概述在我的项目中,我几个月来一直在努力. 这是交易:我有一个UITableView只有1个部分,但UITableViewCells的高度不同.每个UITableViewCell都代表一个对象,新对象不断变得可用,并插入到UITableView中.有效发现将在表中显示的新对象高度的唯一方法是绘制一次(运行绘制UITableViewCell的代码并查看生成的高度). 啊,但是有问题! UITableVie 在我的项目中,我几个月来一直在努力. @H_419_7@

@H_419_7@这是交易:我有一个UItableVIEw只有1个部分,但UItableVIEwCells的高度不同.每个UItableVIEwCell都代表一个对象,新对象不断变得可用,并插入到UItableVIEw中.有效发现将在表中显示的新对象高度的唯一方法是绘制一次(运行绘制UItableVIEwCell的代码并查看生成的高度).

@H_419_7@啊,但是有问题! UItableVIEw委托方法tableVIEw:heightForRowAtIndexPath:在第一次绘制单元格之前调用!这是有道理的:表格想要在绘制它们之前定位单元格.

@H_419_7@我一直在试验LOTS并且只能找到两个选项,这两个选项都有重大缺点:

@H_419_7@>如果之前没有看到表中显示的新对象,只需“猜测”高度并根据需要稍后(在绘制单元格之后)调整单元格的大小.这会导致滚动问题,因为当用户停止滚动时,可能需要将一个或多个单元格调整到正确的高度,这会在表格移动并重新组织时产生糟糕的用户体验.
>在将对象插入UItableVIEw之前,通过“测试”对象来预先计算对象高度.当新对象变为可用时,创建一个“虚拟”UItableVIEwCell并将其绘制在屏幕外,从而计算对象的高度并保存以供日后使用.问题在于,当然,我们只能对主线程进行高度测试(因为我们需要绘制),这会导致应用程序出现严重延迟.

@H_419_7@到目前为止,我的解决方案是使用#2,但试图通过使其高度测试仅每1/4秒发生一次来缓解问题,这有助于“空出”测试,以便主线程没有锁定太多.但是,该解决方案不够优雅,仍会导致滞后问题,尤其是在旧设备上.滞后很糟糕,我真的需要一个更好的解决方案.

解决方法 为了计算高度,this和 this answer建议您可以使用CGLayer在后台线程中进行屏幕外绘制.
Link to iOS documentation to CGLayer. @H_419_7@

@H_419_7@要根据单元格中显示的某些数据ID缓存高度,您可以使用以下代码:

@H_419_7@

-(CGfloat)tableVIEw:(UItableVIEw*)tableVIEw heightForRowAtIndexPath:(NSIndexPath*)indexPath{    Nsstring* objectID = [self getobjectIDForPath:indexPath];    if (![self->IDToCellHeight objectForKey: objectID])    {        CGfloat height = [object calculateHeightForID:objectID];        [self->IDToCellHeight setobject:[NSNumber numberWithfloat:height] forKey: objectID];    }    return [[self->IDToCellHeight objectForKey:objectID] floatValue];}
@H_419_7@当然,第一次抽奖仍然必须在不知道确切高度的情况下完成,但如果您无法根据显示的数据计算高度,则没有解决方法.

总结

以上是内存溢出为你收集整理的iphone – iOS:为UITableView预先计算行高全部内容,希望文章能够帮你解决iphone – iOS:为UITableView预先计算行高所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1045636.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存