如何编程静态单元格从故事板获取高度,同时编程其他单元格以从代码中获取高度

时间:2017-01-31 00:29:58

标签: ios swift uitableview swift3

我有一个带有STATIC单元的uitableview控制器,分为两部分。我调整了细胞的高度0&第0节中的1使用故事板。但是,在切换UI切换并在第1部分中点击单元格后,我使用代码扩展了日期选择器。

我的问题是代码覆盖了第0节中的单元格0和1.如何强制这些单元格从故事板中获取高度?如果那是不可能的,我将如何编码它们的高度,以便单元格扩展代码不会覆盖它?

注意:我是新手,并且不完全理解我用来进行扩展的代码,所以如果我需要更改它,请告诉我。代码贴在下面。

 var pickerVisible = false

// MARK: - COLLAPSABLE CELL

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.section == 1 && indexPath.row == 2 {
        pickerVisible = !pickerVisible
        tableView.reloadData()
    }
    tableView.deselectRow(at: indexPath, animated: true)
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 1 && indexPath.row == 2 && toggle.isOn == false {
        return 0.0
    }
    if indexPath.section == 1 && indexPath.row == 3 {
        if toggle.isOn == false || pickerVisible == false {
            return 0.0
        }
        return 165.0
    }
    return 44.0
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 44.0
}

2 个答案:

答案 0 :(得分:0)

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
   if indexPath.section == 0 {
      // set height for rows in section 0
   } else if indexPath.section == 1 {
      // set height for rows in section 1
   } else {
      // default height for your tableview cell
      return 44.0
   }        
}
  • 如何强制这些单元格从故事板中取出高度?

- >我想你真的不需要这个。

  • 我如何编码它们的高度,以便单元格扩展代码不会覆盖它?

- >它很容易做你想要的(上面的示例代码)

答案 1 :(得分:0)

我找到了另一个答案,它真正解决了我的问题所在 - 如何将一个单元格编程为一个精确的高度,并让所有其他单元格从故事板中放置的高度中获取高度。

答案是,而不是在heightForRowAt中返回一个数字,您可以执行以下操作:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row == 0 {
        return 170.0
    }
    // OTHERWISE, RETURN WHATEVER THE TABLEVIEW WANTS.
    return self.tableView.rowHeight