根据单元格OBjective-C中的标签文本(动态)增加单元格高度

Posted

技术标签:

【中文标题】根据单元格OBjective-C中的标签文本(动态)增加单元格高度【英文标题】:Increase the Cell Height based on the label text(Dynamic) in cell OBjective-C 【发布时间】:2017-03-23 06:39:34 【问题描述】:

如何根据单元格中的标签文本(动态)增加单元格高度。在下面的代码中 lblAnswer 正在获取动态数据,基于此单元格高度应该增加。尝试了下面的代码,但对我不起作用。 TIA

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

    static NSString *CellIdentifier = @"Cell";

    EmpViewCell *cell = (EmpViewCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 


        cell = [[EmpViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        cell.lblAnswer.lineBreakMode = NSLineBreakByWordWrapping;
        cell.lblAnswer.numberOfLines = 0;
        [cell setSelectionStyle:UITableViewCellSelectionStyleGray];

        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"EmpViewCell" owner:self options:nil];

        for (id currentObject in topLevelObjects)
            if ([currentObject isKindOfClass:[UITableViewCell class]])
                cell =  (EmpViewCell *) currentObject;
                cell.selectionStyle=UITableViewCellSelectionStyleNone;
            
        
    
    NSMutableDictionary* emmpdict = [_emparr objectAtIndex:indexPath.row];

    cell.lblEmpName.text = [NSString stringWithFormat:@"%@",[emmpdict objectForKey:@"EmployeeName"]];

    cell.lblQuestion.text=[NSString stringWithFormat:@"%@",[emmpdict objectForKey:@"Question"]];

    cell.lblAnswer.text=[NSString stringWithFormat:@"%@",[emmpdict objectForKey:@"Answer"]];

    return cell;


【问题讨论】:

***.com/a/40035858/6656894 参考这个答案 ***.com/a/39888662/6656894这个答案非常适合您的问题 Dynamically change UITable cell height?的可能重复 【参考方案1】:

您可以使用UITableViewAutomaticDimension 轻松实现此目的。

只需使用下面的鳕鱼e:

your_tableView.estimatedRowHeight = 100; //或任何临时值,因为它会在获得动态高度后被替换

your_tableView.rowHeight = UITableViewAutomaticDimension;

注意:要正常工作,请确保在 tableViewCell 中正确应用所有约束

【讨论】:

【参考方案2】:

如果您在 Storyboard 中将 UILabel 添加到 UITableviewCell,则不会将单元格设为 nil。那么你的一些代码将不会执行,即 if(cell == nil) 因为 cell 不是 nil。

在情节提要中进行以下更改: 确保您已为 UILabel 到 UITableViewCell contentView 提供了顶部、底部、前导和尾随约束。

    然后将 UILabel 的行数设置为“0”,并将换行符设置为“自动换行”。

    在 UITableViewDelegate heightForRow 方法的控制器中:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
        
            tableView.estimatedRowHeight = 100;
            return UITableViewAutomaticDimension;
        
    

这将有助于解决上述要求。

【讨论】:

【参考方案3】:

对于新的 ios 8,有一种新方法可以让这一切变得简单。

目标c:

 - (void)viewWillAppear:(BOOL)animated 
      [super viewWillAppear:animated];
      self.tableView.estimatedRowHeight = 40.0; // for example. Set your average height 
      self.tableView.rowHeight = UITableViewAutomaticDimension;
      [self.tableView reloadData];
    

迅速 3.0:

override func viewWillAppear(animated: Bool) 
    self.tableView.estimatedRowHeight = 40 // for example. Set your average height 
    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.reloadData()

 

【讨论】:

以上是关于根据单元格OBjective-C中的标签文本(动态)增加单元格高度的主要内容,如果未能解决你的问题,请参考以下文章

根据标签文本动态改变单元格高度

根据标签文本长度动态自定义 UITableViewCell 的高度

根据内容动态调整tableview单元格的高度 - iOS Swift

如何根据标签文本快速更改表格视图单元格高度?

表格单元格视图中的多个标签

根据在单元格中的文本字段中输入的值动态增加表格视图单元格