从自定义表格视图单元格类加载时如何调整单元格的高度?

Posted

技术标签:

【中文标题】从自定义表格视图单元格类加载时如何调整单元格的高度?【英文标题】:how to adjust the height of a cell when loading from the custom tableview cell classes? 【发布时间】:2012-12-12 07:44:42 【问题描述】:

我有一个应用程序,其中我在两种设计中添加了两种类型的单元格。所以我使用自定义UITableViewCell 对象类。但我的问题是我在这个单元格中使用文本视图。我需要根据其内容大小调整行高。这是我的代码的样子:

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

    static NSString *CellIdentifier1 = @"CellIdentifier";
    static NSString *CellIdentifier2 = @"Cell";
        
    if(messagesarray==nil||[messagesarray count]==0)
    
        
    
    else
    
        NSMutableDictionary *dicttable=[messagesarray objectAtIndex:indexPath.row];
        NSString *head=[dicttable objectForKey:@"gfgfg"];
        NSString *head1=[dicttable objectForKey:@"gfgfgf"];
        if([type isEqualToString:@"m"])    
        
            if([head isEqualToString:@"NA"])
            
             
                CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
                if (cell == nil)
                
                    cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier1] autorelease];
                    cell.backgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"white_top_portion.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];
                
                cell.selectionStyle = UITableViewCellSelectionStyleNone;
                cell.nameLabel.text=head;
                cell.msg.text=head1;
                [cell.button addTarget:self action:@selector(callAction:) forControlEvents:UIControlEventTouchUpInside];     
              
                if(icon!=nil)
                
                    if(![[ImageCache sharedImageCache] hasImageWithKey:icon])
                    
                        cell.myImageView.image = [UIImage imageNamed:@"fggtgf.png"];
                        NSArray *myArray = [NSArray arrayWithObjects:cell.myImageView,icon,@"fgfgfg.png",[NSNumber numberWithBool:NO],nil];
                        AppDelegate *appDelegate = (AppDelegate  *)[[UIApplication sharedApplication] delegate];
                        [appDelegate performSelectorInBackground:@selector(updateImageViewInBackground:) withObject:myArray];   
                    
                    else 
                    
                        cell.myImageView.image = [[ImageCache sharedImageCache] getImagefromCacheOrUrl:icon];
                    
                
                else
                
                    cell.myImageView.image = [UIImage imageNamed:@"fgfgfg.png"];  
                  
                 
         
                cell.label.text=sub;   
                return cell;
            
            else
            
                Customcellwithimage *cell = (Customcellwithimage *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
             
                if (cell == nil)
                
                    cell = [[[Customcellwithimage alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier2] autorelease];
                    cell.backgroundView = [ [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"white_deal_bg.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]autorelease];
                
             
                cell.selectionStyle = UITableViewCellSelectionStyleNone;
                cell.datelabel1.text=subtitle;
                cell.nameLabel1.text=head;
                cell.msg1.text=head1;
                if(icon!=nil)
                
                    if(![[ImageCache sharedImageCache] hasImageWithKey:icon])
                    
                        cell.myImageView1.image = [UIImage imageNamed:@"fgfgfgf.png"];
                        NSArray *myArray = [NSArray arrayWithObjects:cell.myImageView1,icon,@"fgfgfgf.png",[NSNumber numberWithBool:NO],nil];
                        MFAppDelegate *appDelegate = (MFAppDelegate  *)[[UIApplication sharedApplication] delegate];
                        [appDelegate performSelectorInBackground:@selector(updateImageViewInBackground:) withObject:myArray];   
                       
                    
                    else 
                    
                        cell.myImageView1.image = [[ImageCache sharedImageCache] getImagefromCacheOrUrl:icon];
                    
                
                else
                
                    cell.myImageView1.image = [UIImage imageNamed:@"fgfgfgf.png"];  
                 
              
                cell.cellview1.image=[UIImage imageNamed:@"vf.png"];
                cell.label1.text=sub;
                [cell.button1 addTarget:self action:@selector(callAction:) forControlEvents:UIControlEventTouchUpInside]; 
                cell.bannerview1.image=[UIImage imageNamed:@"vfgf.png"];
                return cell;
               
                         
      

       

谁能帮我实现不同单元格的不同行高?成功。任何人都可以指导我正确的方向

【问题讨论】:

您能否发布您对- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *) 的实现 - 不确定问题出在哪里。 查看我的答案***.com/questions/13656857/… 【参考方案1】:

我认为您正在寻找- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath - 在这里您可以计算每一行的高度。

注意,如果计算工作量很大,您可能会看到性能下降。如果是这种情况,您可以预先计算值并存储它们。

【讨论】:

【参考方案2】:

您可以使用此方法为您的应用程序提供可变高度支持。

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

当您想动态设置高度时,请使用您的 tableview 对象调用此方法。

欲了解更多信息Click Here

或将此方法与其他 tableview 委托方法一起使用。

【讨论】:

对不起..我知道。在这种特殊情况下,在这个方法中找到一种方法 我在上面写了这个。你可以在你想改变行高的地方使用这一行:[tableView setRowHeight:];【参考方案3】:

调整单元格大小会变得相当复杂,尤其是在涉及 UITextView 时。我建议您简单地使用表格视图框架,例如 Sensible TableView,其中所有单元格都会自动调整大小以适应内容。我相信他们现在也有免费版本。

【讨论】:

以上是关于从自定义表格视图单元格类加载时如何调整单元格的高度?的主要内容,如果未能解决你的问题,请参考以下文章

从自定义单元格重新加载表格视图数据

如何从自定义表格视图单元类中获取对表格视图控制器的引用

调整单元格大小时如何使表格视图动画平滑

自动调整大小(动态高度)表格视图单元格的问题

无法在 Bundle 中为自定义表格视图单元格类加载 NIB

如何动态更改自定义单元格的表格视图单元格的高度?