2017-03-02 126 views
1

我正在嘗試構建類似於iOS本地提醒應用的應用。哪裏有包含頁眉和頁腳的項目列表。每個單元格包含一個UITextView,用戶鍵入時將動態更改單元格高度。頁腳視圖包含相同的單元格視圖,除了我希望它是一個頁腳,因此它將堅持到底部視圖。我有單元格設置爲動態高度。UITableView reloadSections不會觸發viewForFooterInSection?

checklistTable.rowHeight = UITableViewAutomaticDimension 
checklistTable.estimatedRowHeight = 60 

checklistTable.sectionFooterHeight = UITableViewAutomaticDimension 
checklistTable.estimatedSectionFooterHeight = 60 

這裏是輸入時更新單元格高度的邏輯,這對於常規單元格非常適用,但不適用於頁腳視圖。我在 viewForFooterInSection中設置了一個斷點,它在初始加載後從未被調用過。

func textViewDidChange(_ textView: UITextView) { 

    let startHeight = textView.frame.size.height 
    let calcHeight = textView.sizeThatFits(textView.frame.size).height 

    if startHeight != calcHeight { 
     UIView.setAnimationsEnabled(false) 
     tableView?.beginUpdates() 

     if cellType == .footer { 
      tableView?.reloadSections(IndexSet(integer: 0), with: .automatic) 
     } 

     tableView?.endUpdates() 
     UIView.setAnimationsEnabled(true) 
    } 
} 

任何人都可以指向正確的方向嗎?在UIView &調用tableView?.beginUpdates()感謝

+0

沒有viewForFooterInSection曾經得到最初叫什麼? –

+0

API文檔只說這種方法更新單元格,而不是頁眉和頁腳。 – picciano

+0

@nirav是的,viewForFooterInSection獲取調用初始化。有時在滾動 –

回答

2

啓用&禁用動畫同時看起來曖昧
簡單,調用reloadSections應該工作,如:

if startHeight != calcHeight { 

     if cellType == .footer { 
      tableView?.reloadSections(IndexSet(integer: 0), with: .automatic) 
     } 
    } 
+0

感謝@ystack。我試過了,它沒有區別:( –

+0

woah!你嘗試過執行一個簡單的'table.reloadData()'嗎? – ystack

+0

reloadData可能會重新繪製頁腳,但我真的在尋找一種更新頁腳的優雅方式,而無需重新加載整個表格,重新加載也會導致鍵盤退出,而在用戶輸入時我不想這樣做。 –