具有异常的动态UITableViewCell高度

时间:2016-09-05 19:29:13

标签: swift xcode uitableview

我正在尝试动态设置自定义单元格的高度。我使用下面的代码,它的工作原理。

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = view.frame.height / 4

但是,我需要索引0(第一个单元格)的表视图作为具有固定高度的标题,其余单元格具有动态高度。

我试过了:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    if indexPath.row == 0 {
        return (self.view.frame.height/2)
    }
    return tableView.estimatedRowHeight
}

但是这只是设置我在viewDidLoad()中设置的estimatedRowHeight的高度

我怎样才能使索引0的第一行高度为屏幕的1/2

view.frame.height / 2

而其余的细胞动态改变高度。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

对于indexPaths大于0的单元格,我认为您需要从tableView.rowHeight方法返回tableView.estimatedRowHeight而不是heightForRowAtIndexPath

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
  if indexPath.row == 0 {
    return (self.view.frame.height / 2)
  }
  return tableView.rowHeight // or return UITableViewAutomaticDimension
}

答案 1 :(得分:0)

ozgur给了我提示我需要解决的问题。

而不是在viewDidLoad()中设置tableView.row高度,我把它移到了cellForRowAtIndexPath

if indexPath.row == 0 {
    tableView.rowHeight = view.frame.height / 2

    ...

    return cell
} else {

    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = view.frame.height / 4

    ...

    return cell
}
编辑:没关系。这实际上不起作用,因为第一个单元格位于索引0,当它尝试创建该单元格时,tableView将所有行高度设置为view.frame.height / 2