插入自定义节标题约束警告

时间:2016-09-25 05:34:26

标签: ios swift uitableview

当我使用自定义节头xib文件向项目中插入一个额外的部分时,我遇到了这个问题,如果当前视图位于屏幕的最底部,我会收到各种约束警告。如果按下添加按钮时视图不在屏幕的最底部,则不会出现这些警告。

当我选择执行reloadData而不是插入新单元格时,我没有遇到此问题。但是,我不想重新加载整个表只是为了得到一个新的单元格。

我上传了一个说明我问题的迷你示例项目。以下是如何复制问题

  1. 当应用启动时,您将是3个部分,每个部分有2行。使用第0部分的视图,如果单击“添加”按钮,则会在表格的底部添加一个额外的部分。这将是第3部分。此处没有约束警告

  2. 一直滚动到底部,直到到达tableView的最底部,其中显示第3行第0行和第3行第1行。现在单击“添加”按钮,您将看到我所指的所有这些约束警告。

  3. Github Insert Section Header Sample Project

1 个答案:

答案 0 :(得分:1)

在视图层次结构中使用“自动布局”定位视图时,应尽可能避免设置框架或某些固定尺寸。你的代码中的问题是,你给标题一个固定的高度,这是自动布局不喜欢的东西:

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  return 260.0
}   

您应该将其更改为

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  return UITableViewAutomaticDimension
}

并告知UITableView估计的身高:

tableView.estimatedSectionHeaderHeight = 260.0

因此表视图将根据标题中的布局约束和内容推断高度。

有关详细信息,请参阅文档中的self-sizing cells and headers部分。