当我使用自定义节头xib文件向项目中插入一个额外的部分时,我遇到了这个问题,如果当前视图位于屏幕的最底部,我会收到各种约束警告。如果按下添加按钮时视图不在屏幕的最底部,则不会出现这些警告。
当我选择执行reloadData而不是插入新单元格时,我没有遇到此问题。但是,我不想重新加载整个表只是为了得到一个新的单元格。
我上传了一个说明我问题的迷你示例项目。以下是如何复制问题
当应用启动时,您将是3个部分,每个部分有2行。使用第0部分的视图,如果单击“添加”按钮,则会在表格的底部添加一个额外的部分。这将是第3部分。此处没有约束警告
一直滚动到底部,直到到达tableView的最底部,其中显示第3行第0行和第3行第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部分。