gpt4 book ai didi

iphone - 如何计算通过 cellForRowAtIndexPath 中的开关设置的单元格的 heightForRowAtIndexPath。

转载 作者:可可西里 更新时间:2023-11-01 06:21:11 25 4
gpt4 key购买 nike

我这样设置我的单元格:

所以,几个开关,定义单元格,因为数据不在对象列表中,而是一组应该以不同方式显示在 tableView 中的信息。

-(UITableViewCell *)value1CellForTableView:(UITableView *)tableView {
static NSString *CellIdentifierValue1 = @"Value1Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierValue1];

if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifierValue1];
cell.detailTextLabel.textAlignment = UITextAlignmentLeft;
cell.textLabel.textAlignment = UITextAlignmentLeft;
}
return cell;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = nil;

switch (indexPath.section) {
case 0:
//Coupon
switch (indexPath.row) {
case 0:
//Couponcode
cell = [self value1CellForTableView:tableView];
cell.textLabel.text = @"Code";
cell.detailTextLabel.text = presentedCoupon.couponNr;
break;
case 1:
//Coupondescription
cell = [self value1CellForTableView:tableView];
cell.detailTextLabel.text = presentedCoupon.couponDescription;
cell.detailTextLabel.numberOfLines = 0;
cell.textLabel.text =@"Ihr Vorteil";
break;

}
break;


case 1:
//Productinfo
switch (indexPath.row) {
case 0:
cell = [self defaultCellForTableView:tableView];
cell.imageView.image = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: [presentedCoupon.refProdName stringByAppendingString:@".png"]]];
cell.textLabel.text = presentedCoupon.refProdName;
break;



}
break;

case 2:
//Shopinfo
switch (indexPath.row) {
case 0:
cell = [self defaultCellForTableView:tableView];
cell.textLabel.text = ((Shop*)presentedCoupon.refShop).name;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

break;
}
break;
}

if (cell == nil) {
cell = [self defaultCellForTableView:tableView];
cell.textLabel.text = @"Stanni";
}
[cell layoutIfNeeded];
return cell;
}

然后我这样计算高度。

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"height");
UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];

CGFloat height = 24 + [cell.detailTextLabel.text sizeWithFont:cell.detailTextLabel.font constrainedToSize: CGSizeMake(cell.detailTextLabel.frame.size.width, 1000.0f) lineBreakMode:cell.detailTextLabel.lineBreakMode].height;

return MAX(height, 44.0f);

问题:

问题是,正如许多线程中提到的,并且在我的日志中也可见,每个单元格的高度(可见或不可见)在表格 View 的初始化时被询问。因此,在更大的 100 多个列表中,还会创建 100 多个单元格——> 在启动时浪费了。

当像这样设置单元格时,是否还有其他可能获取此信息?是否真的有必要在 heightForRowAtIndexPath 中再次构建开关盒结构以避免这些调用并为每个单元格获得正确的高度?

用每个单元格的单一信息保存一个“数据源列表”会更好吗?

但是如何处理不同的单元格样式,自定义单元格。

最佳答案

方法

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

在方法之前为每个单元格调用

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

所以在第一种方法中,单元格还没有创建,你不应该尝试访问它们。

创建 tableView 时,首先会向数据源询问行数。然后对于每一行,向数据源询问行的高度,以便 tableView 知道其内容的总高度,最后,向数据源询问要显示的单元格(实际 View )。

在你的情况下,我会再次构建 switch case 结构。关于“数据源列表”,我以前从未做过,所以也许这是一个更好的解决方案。

关于iphone - 如何计算通过 cellForRowAtIndexPath 中的开关设置的单元格的 heightForRowAtIndexPath。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8831664/

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