2016-09-25 80 views
1

当我使用自定义节标题xib文件向我的项目插入额外部分时,如果当前视图位于最下方的位置,则会出现各种约束警告屏幕。如果按下添加按钮时视图不在屏幕的最底部,则不会显示这些警告。插入自定义部分标题约束警告

当我选择reloadData而不是插入新的单元格时,我不会遇到这个问题。但是,我不想重新加载整个表格来获得新的单元格。

我上传了一个小例子来说明我的问题。下面是你可以如何复制问题

  1. 当应用程序启动时,你将是3节,每节2行。通过第0节的视图,如果单击添加按钮,则会在表格的底部添加一个额外的部分。这将是第3部分。这里没有约束警告

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

Github Insert Section Header Sample Project

回答

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部分。

+0

这确实有效。所以基本上,这个警告并不意味着布局有任何问题。这只是Xcode不喜欢固定高度的autoLayout?请注意,我以前用自动Dimension去了,因为我遇到了同样的问题http://stackoverflow.com/questions/28244475/reloaddata-of-uitableview-with-dynamic-cell-heights-causes-jumpy-滚动 – user172902

+0

有在你的约束中没有含糊不清。你应该让表视图根据约束来推断标题的高度,而不是设置固定的高度。 – ozgur

+0

我刚刚意识到你的解决方案造成了另一个问题。浅蓝色的堆栈视图在屏幕上完全消失。我预计在浅蓝色堆叠视图中会出现[260-80-80-80 = 20点高度]]?虐待问在另一个问题,但因为它是稍有不同的事情 – user172902