UITableViewCell indentationLevel在iOS 8中不起作用

时间:2014-10-22 13:57:52

标签: ios objective-c uitableview ios8

我有UITableView个自定义UITableViewCell,我使用indentationLevel将内容移到右侧。 在iOS 7中,一切正常,但在iOS 8中,当我设置indentationLevel > 0时,表格视图不会渲染单元格,界面会冻结。唯一的解决方案是退出应用程序。 如果我继续调试,我可以看到应用程序使用的内存不断增加,CPU占99%。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CustomCellReuseID";
    TreeTableViewCell *cell = (TreeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.delegate = self;

    FolderSection *aFolderSection = self.dataSourceArray[indexPath.section];
    FolderNode *aFolderNode = (FolderNode *)aFolderSection.folderNodes[indexPath.row];

    cell.indentationWidth = 20.0f;
    cell.indentationLevel = aFolderNode.level;

    // set up the cell

    return cell;
}

想法?

2 个答案:

答案 0 :(得分:5)

似乎iOS> 6在调用缩进配置的方法之前放置视图。将CustomCell.swift中的代码更改为:

override func awakeFromNib() {
    super.awakeFromNib()
    self.indentationWidth = 30.0
    self.indentationLevel = 0
}

override func layoutSubviews() {
    super.layoutSubviews()
    let indentPoints = CGFloat(self.indentationLevel) * self.indentationWidth
    self.contentView.frame = CGRectMake(indentPoints, self.contentView.frame.origin.y,self.contentView.frame.size.width - indentPoints,self.contentView.frame.size.height)
}

适当地打电话给他们。然后在你的cellForRowAtIndexPath:

...
cell.indentationLevel = 1 // Your indentation level

答案 1 :(得分:0)

我认为您还有其他问题,indentationLevelindentationWidth都可以按照预期在iOS 8中使用。

我会尝试:

  • 删除调用以访问您的dataSource并将indentationLevel分配给静态值(如果可行,则表示您遇到问题 与您的dataSource调试。)

  • 使用vanilla UITableViewCell确保您的TreeTableViewCell子类不存在问题。

  • 验证您的所有Storyboard设置是否正确(假设您正在使用Storyboard和单元原型)。事实上,确保您的原型单元格使用您出列的CellID(在您的情况下为CustomCellReuseID)。