动态表格单元格高度

时间:2012-05-02 07:44:57

标签: ios uitableview cell

使用故事板,我为表视图创建了一个自定义单元格,我还为它创建了一个包含我所有属性的自定义类。

现在,什么是使细胞高度动态变化的最佳方法,哪种方法最好? 我应该在单元格的自定义类中执行此操作吗?或者在我的表视图控制器中?

我想在自定义类中执行此操作会更有意义,但那我应该怎么做呢? 填写特定标签后,应更改单元格的高度

4 个答案:

答案 0 :(得分:5)

您无法从自定义绘图类更改单元格的高度。

您可以在仅具有UITableView的viewController中执行此操作。 通过为所有单元格指定硬编码行高,或使用

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

并在此指定单元格的高度。 如果要为单元格设置不同的高度,则应检查indexpath.row属性并返回所需的高度值。

如果您想要更改已经绘制的屏幕单元格的高度,则必须重新加载该单元格以反映更改:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

答案 1 :(得分:4)

使用以下代码

-(CGFloat)heightForText:(NSString *)str width:(int)width font:(UIFont *)font lineBreakMode:(NSLineBreakMode) lineBreakMode
{
    CGSize textSize;
    textSize = [str boundingRectWithSize:CGSizeMake(width, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : font} context:nil].size;
    return textSize.height;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(tableView == self.yourTable)
    {
            NSMutableDictionary *dict = [self.yourArray objectAtIndex:indexPath.row] ;
            return [self heightForText:[dict valueForKey:@"reviewDescription"] width:300 font:[UIFont fontWithName:kAppRegularFont size:15.0] lineBreakMode:0]+75;
    }
    return 70;
}

答案 2 :(得分:0)

将视图控制器设置为表视图的委托,然后在视图控制器中实现以下UITableViewDelegate方法:

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

答案 3 :(得分:0)

将这些行添加到“viewDidLoad”方法

 self.tableView.estimatedRowHeight = your height here

 self.tableView.rowHeight = UITableViewAutomaticDimension;

不要将默认高度设置为委托

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

}