我试图调整我的表格视图中的一个单元格的高度。我正在调整单元格的“大小检查器”内的“行高”设置的大小。当我在我的iPhone上运行应用程序时,单元格的默认大小设置自表格视图中的“行大小”。

如果我改变了表格视图的“行大小”,那么所有单元格的大小都会改变。我不想这样做,因为我只想为一个单元格自定义大小。我已经看到了很多关于这个问题的程序化解决方案的帖子,但如果可能的话,我更喜欢通过故事板来实现。


当前回答

作为评论添加,但作为可见性的答案发布:

如果最初将表视图设置为“静态单元格”,然后将其更改为“动态原型”,似乎也会出现问题。我有一个问题,甚至委托方法heightForRowAtIndexPath被忽略。我首先通过直接编辑故事板XML来解决这个问题,然后最终从头开始重新构建故事板场景,从一开始就使用动态原型。

其他回答

如果你使用UITableViewController,实现这个方法:

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

在行函数中,您可以选择高度。例如,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
       return 100;
    } 
    else {
       return 60;
    }
}

在本例中,第一行高度为100像素,其他行高度为60像素。

我希望这篇文章能帮到你。

如果你想设置一个静态行高,你可以这样做:

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

在动态单元格上,UITableView上设置的rowHeight总是覆盖单个单元格的rowHeight。

但是在静态单元格上,在单个单元格上设置rowHeight可以覆盖UITableView的。

不确定这是否是一个漏洞,苹果可能是故意这么做的?

在XML视图中打开故事板,并尝试编辑所需元素的rowHeight属性。

当我试图为我的原型行设置自定义rowHeight时,它为我工作。 它不能通过检查器工作,但可以通过XML工作。

对于动态单元格,UITableView上设置的rowHeight总是覆盖单个单元格的rowHeight。

在我看来,这种行为是个bug。任何时候你都必须在两个地方管理UI,这很容易出错。例如,如果您在故事板中更改单元格大小,您必须记住在highightforrowatindexpath:中也要更改它们。在苹果修复这个错误之前,目前最好的解决方法是重写highightforrowatindexpath:,但是使用故事板中的实际原型单元格来确定高度,而不是使用神奇的数字。这里有一个例子:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /* In this example, there is a different cell for
       the top, middle and bottom rows of the tableView.
       Each type of cell has a different height.
       self.model contains the data for the tableview 
    */
    static NSString *CellIdentifier;
    if (indexPath.row == 0) 
        CellIdentifier = @"CellTop";
    else if (indexPath.row + 1 == [self.model count] )
        CellIdentifier = @"CellBottom";
    else
        CellIdentifier = @"CellMiddle";

    UITableViewCell *cell = 
              [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    return cell.bounds.size.height;
}

这将确保对原型单元格高度的任何更改将在运行时自动拾取,并且您只需要在一个地方管理您的UI:故事板。