2014-04-06 51 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)使用此方法自动计算没有人报告泄漏的单元格高度。我只是测试它。如果你有一个泄漏的场景,我想看看。 –