2016-09-25 51 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