6

目前我正在使用带有情节提要的自动布局来动态调整自定义UITableViewCell的大小。除了滚动时存在内存泄漏外,一切都正常工作。

我知道问题出在打电话

[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

从内部

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

我的问题是,创建参考单元的最佳方法是什么?如何在没有的情况下从情节提要加载单元格dequeueReusableCellWithIdentifier

可以调用dequeueReusableCellWithIdentifierviewDidLoad创建一个参考单元作为属性吗?

我需要参考单元来调整大小。

谢谢你的帮助。

4

3 回答 3

10

关于如何创建参考单元格(参见原始问题),我可以看到有几个选项:

  1. 使用 XIB 创建自定义单元格,这里有很棒的文章 ->链接

    • @smileyborg 向我指出了这一点,谢谢!
  2. 在代码中创建您的自定义单元格以及约束。

  3. 在情节提要中创建您的自定义单元格作为原型单元格

    • 之后有2个选项:
      • 将自定义单元格从表格视图拖放到情节提要场景中,作为顶级 nib 对象(不是视图层次结构的一部分),然后简单地为其创建出口。
      • 复制自定义单元格并将其粘贴到情节提要场景中。以这种方式使用它时,无需将原始单元格注册到表中以进行出队。
      • 这两种方法的小问题是,一旦将自定义单元格拖放到情节提要场景中,您将无法直观地看到它并安排 UI。
    • 很棒的文章在这里->一个链接

感谢大家的帮助!

于 2014-04-08T07:44:17.457 回答
1

是否可以从 viewDidLoad 调用 dequeueReusableCellWithIdentifier 并将参考单元格创建为属性?

是的,你可以这样做。或者懒惰地初始化属性:

- (UITableViewCell *)referenceCell
{
    if (!_referenceCell) {
        _referenceCell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];
    }
    return _referenceCell;
}
于 2014-04-06T20:59:16.393 回答
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];
}
于 2014-04-06T20:57:49.430 回答