如何更改表格视图单元格的高度

时间:2009-10-13 22:45:42

标签: objective-c iphone cocoa-touch

我试图阅读一些RSS数据。我有不同大小的数据。数据存在于tabke视图数据对象中。我使用标签添加数据并调整数据大小。没有成功。请帮忙。

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

    static NSString *CellIdentifier = @"Cell";
    NSLog(@"in the tabel view cell");
    heightOfCell=[self tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Default"];
    if (cell == nil) 
    {
        //cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,heightOfCell) reuseIdentifier:@"Default"] autorelease];
        UILabel *label = [[UILabel alloc] init];
        NSString *cellText = [[TableViewData news] valueForKey:[NSString stringWithFormat:@"%d",[indexPath row]]];
        UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:10.0];
        CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
        label.text = [[TableViewData news] valueForKey:[NSString stringWithFormat:@"%d",[indexPath row]]];
        CGSize labelSize = [[[TableViewData news] valueForKey:[NSString stringWithFormat:@"%d",[indexPath row]]] sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

        label.lineBreakMode=UILineBreakModeWordWrap;
        [label sizeThatFits:labelSize];
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(55.0,42.0,245.0,heightOfCell) reuseIdentifier:@"Default"] autorelease];
        //[label sizeToFit];
        [cell addSubview:label];
        [label release];
    }
}

6 个答案:

答案 0 :(得分:23)

您需要使用以下方法。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   return 45;
}

您需要根据您的要求更改高度

应该注意的是,默认高度是44。

答案 1 :(得分:4)

您需要实施以下方法:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // some code that compute row's height
}

答案 2 :(得分:3)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 50;
   // This is just Programatic method you can also do that by xib ! 
}

您也可以在Interface Builder中更改它。打开* .xib文件,选择表格,显示“大小”检查器,然后更改行高。但请注意,默认高度为44像素。

答案 3 :(得分:3)

有两种方法可以设置UITableViewCell的高度。:

  1. UITableView有一个名为rowHeight的属性,您可以使用该属性将所有UITableViewCell设置为相同的行高;
  2. 如果您实施UITableViewDelegate协议并包含tableView:heightForRowAtIndexPath:方法,那么您有责任决定当前的UITableViewCell'height。在实践中,我们总是使用委托方法来设置单元格的高度,只有每个单元格的高度可能是动态的!并且该方法优先于UITableView的{​​{1}}属性!
  3. 所以,我认为您可能更喜欢第二种方法:

    rowHeight

答案 4 :(得分:1)

我看到了很多解决方案,但都是错误的或不完整的。你不需要计算任何东西(没有字体,没有大小,没有)... 您可以在viewDidLoad和autolayout中解决5行的所有问题。 这对于客观的C:

_tableView.delegate = self;
_tableView.dataSource = self;
self.tableView.estimatedRowHeight = 80;//the estimatedRowHeight but if is more this autoincremented with autolayout
self.tableView.rowHeight = UITableViewAutomaticDimension;
[self.tableView setNeedsLayout];
[self.tableView layoutIfNeeded];
self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0) ;

对于swift 2.0:

 self.tableView.estimatedRowHeight = 80
 self.tableView.rowHeight = UITableViewAutomaticDimension      
 self.tableView.setNeedsLayout()
 self.tableView.layoutIfNeeded()
 self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0)

现在使用xib创建您的单元格或在Storyboard中创建tableview 有了这个你不需要实现任何更多或覆盖。 (不要忘记数字os行0)和底部标签(约束)降级"内容拥抱优先级 - 垂直到250"

enter image description here

您可以在下一个网址中下载代码: https://github.com/jposes22/exampleTableCellCustomHeight

参考文献:http://candycode.io/automatically-resizing-uitableviewcells-with-dynamic-text-height-using-auto-layout/

答案 5 :(得分:0)

tableView:cellForRowAtIndexPath:委托调用之前,您必须知道所有单元格的高度,这可能需要您在视图控制器或其他列表中存储高度。

自定义单元格高度的功能是tableView:heightForRowAtIndexPath:。表格视图的默认高度为44像素,供参考。

您可以找到文档here