iOS: Autolayout和UITableViewCell的动态高度 (2) – 多样式Cell切换

本文详细介绍了如何在UITableView中实现动态高度变化的TableViewCell,并通过改变样式模拟下载过程,展示了两种不同样式的TableViewCell如何正确运行在iOS7和iOS6中。实现了在下载过程中显示指定数量的Cell,完成后自动切换样式显示更多项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文转载自:https://www.mgenware.com/blog/?p=509

上文中。我们讲了单一样式的UITableViewCell在Autolayout下的动态高度,本文将在上文的基础上,增加两个地方:

1. 多个样式的UITableViewCell类型。

2. UITableViewCell样式动态变化变化。

完成这样一个程序,TableView中的Cell模拟下载过程,等“下载”完成后,切换到另一个样式的Cell。两种样式的Cell都是使用Autolayout规划,可以正确运行在iOS 7和iOS 6中(Autolayout最低要求iOS 6),如下图:

屏幕快照 2014-01-05 下午7.59.16

屏幕快照 2014-01-05 下午7.59.26


(可以看到下载过程中只能显示7个Cell,但是下载完成后Cell高度发生了变化,可以显示8个项目)

 

整个执行方式实际上就是沿用上文的描述的方法,即在heightForRowAtIndexPath中使用一个Cell做测量并返回高度,在cellForRowAtIndexPath中继续使用Cell重用机制。只不过这里是两个样式的Cell,所以在UITableViewheightForRowAtIndexPath方法中,要准本好两个供测量的Cell。当然,Cell内容加载也是两个。具体改用哪种Cell,是根据数据源中的特定数据,在本例中,当然就是是否指示下载完成的属性。

至于数据变化后Cell的刷新,调用UITableViewreloadRowsAtIndexPaths方法就OK了。来简单说一下实现过程(具体请参考源代码)。

首先,选中Storyboard中TableView,把Prototype Cells从1改成2。这样就有两个Prototype Cell了:

屏幕快照 2014-01-05 下午8.07.56

然后设计好两个Cell的UI:

屏幕快照 2014-01-05 下午8.08.05

注意每个Cell都定义好Autolayout,并且上下都连接上Constraint,否则systemLayoutSizeFittingSize方法不会返回正确的结果,如下图:

屏幕快照 2014-01-05 下午8.08.16

最后别忘了为每一个Cell设置自己的Reuse Identifier。

 

代码上,多数代码和上文的完全类似,这里就不再多贴了。

看几个比较重要的,比如heightForRowAtIndexPath方法,只创建两个Cell来测量,Cell的内容加载和测量高度返回和上文讲的类似。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    //Cell均只创建一次
    static NormalCell *normalCell = nil;
    static CompletedCell *compCell = nil;
    
    MyTask *task = [_tasks objectAtIndex:indexPath.row];
    if (task.isCompleted)
    {
        if (!compCell) //加载一种Cell
            compCell = [self getCompletedCell:task];
        return [self getCellHeight:compCell];
    }
    else
    {
        if (!normalCell) //加载另一种Cell
            normalCell = [self getNormalCell:task];
        return [self getCellHeight:normalCell];
    }
}

还有 cellForRowAtIndexPath方法,直接调用加载Cell的方法就可以了:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    MyTask *task = [_tasks objectAtIndex:indexPath.row];
    if (task.isCompleted)
    {
        return [self getCompletedCell:task];
    }
    else
    {
        return [self getNormalCell:task];
    }
}


内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、COSO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析模拟,揭示了生物质炉具在实际应用中的优点挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值