2014-04-06 77 views
5

目前我正在使用故事板的自動佈局來動態調整自定義的UITableViewCell的大小。除了在滾動時存在內存泄漏之外,所有內容都應該如其應有的那樣工作。從Storyboard加載自定義的UITableViewCell

我知道這個問題是從內部

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

我的問題是,這將是創建一個參考單元的最佳方法調用

[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

?如何在沒有dequeueReusableCellWithIdentifier的情況下從故事板加載單元格?

可以從viewDidLoad撥打電話dequeueReusableCellWithIdentifier並創建參考單元格作爲屬性嗎?

我需要參考單元格進行尺寸調整。

感謝您的任何幫助。

回答

10

關於如何創建引用單元格(見原題),有幾個選項,我可以看到:

  1. 創建XIB自定義單元格,大文章在這裏 - >a link

    • @smileyborg向我指出了這一點,謝謝!
  2. 在代碼中創建您的自定義單元格以及約束條件。

  3. 創建故事板您的自定義單元格爲原型細胞

    • 後有2種選擇:
      • 阻力,並從表視圖拖放自定義單元格的故事板的場景,作爲一個頂級筆尖對象(不是視圖層次結構的一部分),只需創建它的出口。
      • 複製自定義單元格並將其粘貼到故事板場景。當以這種方式使用它時,不需要將原始單元格與表格註冊爲出列。
      • 這兩種方法存在的一個小問題是,一旦將自定義單元格拖放到故事板場景中,您將無法直觀地看到它並安排UI。
    • 偉大的文章在這裏 - >a link

謝謝大家的幫助!

0

你可以只出隊的細胞一次並存儲高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSNumber *height; 

    if (!height) 
    { 
     UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"YourCustomCell"]; 
     height = @(cell.bounds.size.height); 
    } 

    return [height floatValue]; 
} 
1

而且是確定可能從viewDidLoad中調用dequeueReusableCellWithIdentifier並創建一個參考單元的財產?

是的,你可以這樣做。或懶惰初始化屬性:

- (UITableViewCell *)referenceCell 
{ 
    if (!_referenceCell) { 
     _referenceCell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    } 
    return _referenceCell; 
} 
+0

看來這也會造成泄漏。我正在測試它。 – Iki

+0

昨晚,我與泰勒福克斯(@smileyborg)的交談中,他創造了自動佈局和動態表視圖高度[鏈接](一個很好的例子http://stackoverflow.com/questions/18746929/using-auto-佈局在-的UITableView換動態小區的佈局,可變行高度/ 18746930#18746930),同時他也證實,使用dequeueReusableCellWithIdentifier的cellForRowAtIndexPath之外可能創造泄漏。 – Iki

+0

好奇@smileyborg認爲這會泄漏。我的[TLIndexPathTools](https://github.com/wtmoose/TLIndexPathTools)使用此方法自動計算沒有人報告泄漏的單元格高度。我只是測試它。如果你有一個泄漏的場景,我想看看。 –