2015-10-06 90 views
7

我有一个静态的UITableView,它有12行和11行,我知道高度需要。静态UITableView,在Swift中制作一个具有动态高度的单元格

我有一个UILabel,其中有坐在12行内的动态文本,我如何去制作基于UILabel中文本的动态高度。

我试过viewDidLoad以下的代码,但它没有奏效。行保持相同的高度。我还设置线= 0UILabel

tableView.estimatedRowHeight = 100.0 
    tableView.rowHeight = UITableViewAutomaticDimension 
+0

请解释您的意思是“它没有工作”。了解您已经实施的“UITableViewDelegate”中的哪些相关方法以及如何实现也很重要。 –

回答

9

您试过吗?

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if (indexPath.row < 11) { 
     // Everything starts at 0, so this covers 0-10 
     // Whatever your cell height is 
     return <#fixedCellHeight#> 
    } else { 
     // This is your 12th cell (indexPath.row 11), as we start counting at 0 
     return UITableViewAutomaticDimension 
    } 
} 
+1

在有望重回“CGFloat的” –

+0

一个功能缺失的回报,我改变它周围的,如果(indexPath.row <11){ 回100 }其他{ 回报UITableViewAutomaticDimension }好像它的工作,我怎样才能改变上述为零而不是100 –

1

试试这个:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 
0

您可以创建2个电池原型细胞的表视图。你给他们2个不同的ID。 然后在您的代码中,您覆盖此功能

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var cell = UITableViewCell() 

    if indexPath.row < 12 { 
     cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
    } else { 
     cell = tableView.dequeueReusableCellWithIdentifier("cell12", forIndexPath: indexPath) 
    } 

    return cell 
} 
0

您可以创建文本高度动态小区,那么你可以设置表视图

此处的静态和动态的细胞都在链接到动态细胞与文本如何动态地更改单元格高度的UITableView静态单元格

0

如果您使用的是静态单元格,将一个单元格更改为动态高度,并且其他人可以编辑为此,则可以添加@Adrian答案。

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

     if indexPath.row == 11 { 
     // This is your 12th cell (indexPath.row 11), as we start counting at 0 
      return UITableViewAutomaticDimension 
     } else { 
      return super.tableView(tableView, heightForRowAtIndexPath: indexPath) 
     } 
    } 
0

更优雅可能是刚刚实施的建议:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

或者在目标C:

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

但是,而不是行特定的逻辑,加约束你的静态细胞的内容在Storyboard保持行高不变。这样,如果您移动行或更改内容,则无需更改任何代码。

相关问题