2015-11-11 58 views
0

在我的應用程序中,我有一個UITableView,其單元格包含具有不同內容的文本和UIButton。展開tableViewCell Swift

當用戶單擊單元格按鈕時,單元格應展開以顯示所有單元格的文本內容。所以展開的單元格的高度將因文本內容而異。

我搜索了很多關於這個問題,但沒有有用的結果:S。

我試過這種方法,但它並沒有給我正確的內容,有時細胞膨脹直,有時沒有,

let fixedWidth = tmpCell.textView.frame.size.width 
     tmpCell.textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))//CGFloat.max 
     let newSize = tmpCell.textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
     var newFrame = tmpCell.textView.frame 
     newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
     tmpCell.textView.frame = newFrame 
     self.heightForTextView = tmpCell.textView.frame.size.height 

     tableView.beginUpdates() 
     tableView.endUpdates() 

任何一個NOW的如何實現這個問題? 或我的方式有什麼問題?

非常感謝

回答

0

您的方式沒問題。 (儘管我還沒有完全閱讀它) 你必須爲你的單元格設置一個新的框架來擴大它,你將不得不相應地佈局單元格的內容。以編程方式執行此操作即可。

但是,您必須告訴表格您的單元格有多大。通常這是表UITableView.rowHeight上的一個屬性。但是,只有當所有的細胞具有相同的高度,這不適合您的需要時才適用。

在您的情況下,您將不得不響應對tableView(_:heightForRowAtIndexPath:)的呼叫,以確保每個小區的正確高度。

所以,當用戶觸摸按鈕,那麼你不會直接改變你的細胞的外觀。您寧願存儲該單元中顯示的對象的新統計信息。引入一些布爾擴展屬性等。然後在你的表上調用UITableView.reloadData(),使其重繪自己的數據。然後迴應它,就好像你是第一次繪製細胞一樣。評估擴展屬性(或用於存儲單元格狀態的任何內容)並相應地進行佈局。您可以在cellForRowAtIndexPat中執行此操作,或者您可以在UITableCellView的子類中執行此操作,您可以使用它。然而,爲這些pruposes分類UITableViewCell並不是一個壞主意。