Swift / XCode 6.4:如何以编程方式更改表视图控制器中单元格的高度

时间:2015-09-04 17:02:09

标签: ios xcode swift uitableview

在我的iOS应用程序中,有一个静态单元格的表格视图控制器,其中包含三种不同类型的单元格,其样式为Subtitle。其中一个应该比其他两个高得多,因为它应该包含很长的文本。因此,在它的大小检查器中,我设置了100的高度,但是当我通过其标识符在代码中创建新单元格时,高度始终是默认值。

我该如何更改?我已经读过我应该覆盖这个方法:

<!DOCTYPE html>
<html>
<head>

</head>
<body>
     <canvas id="exampleCanvas" width="500" height="300" style="border:1px solid #000000;">
          Your browser doesn’t currently support HTML5 Canvas. Please check caniuse.com/#feat=canvas for information on browser support for canvas.
        </canvas>


     <script type="text/javascript">
         var canvas = document.getElementById('exampleCanvas');
         context = canvas.getContext('2d');
         context.beginPath();
         context.moveTo(50,50);
         context.lineTo(250,150);
         context.stroke();
     </script>
</body>
</html>

但后来我不知道如何使用它。 你能解释一下吗? enter image description here

3 个答案:

答案 0 :(得分:7)

正如你所说的那样tableview单元格是静态的,所以你知道哪个单元格的高度更高,在heightForRowAtIndexPath中传递该单元格的indexpath并从那里返回预期的单元格高度。 假设您的第一个单元格具有更高的高度,然后使用heightForRowAtIndexPath这样的

 func tableView(tableView: UITableView,
    heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if indexPath.row == 1 {
            return 100 //Whatever fits your need for that cell
        } else {
            return 50 // other cell height
        }
}

无需创建三个不同的原型单元格,只需在单元格上创建就足够了。

答案 1 :(得分:2)

您可以按照自己在帖子中提到的heightForRowAtIndexPath实施,并使用cellForRowAtIndexPath获取单元格。然后根据reuseIdentifier

设置高度
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
  if let cell = tableView.cellForRowAtIndexPath(indexPath) {
    if cell.reuseIdentifier == "SpecialCell" {
      return 100.0
    }
  }
  return 44.0
}

答案 2 :(得分:0)

为什么不在“界面”构建器中使用2个不同的TableViewCell并选择要在cellForRowAtIndexPath中使用的那个?

这是最简单的方法,您甚至可以在必要时区分两种类型。