设置背景颜色时UITableViewCell中出现意外的颜色框

时间:2015-03-26 12:09:23

标签: ios uitableview

有时会在UITableViewCell中显示一个意外的颜色框。

Screenshot from iPhone 5

以下方法最终由tableView调用:cellForRowAtIndexPath:

func indicateAsDoneCell(cell: ButtDTaskListTableViewCell) {

    if let itemName = cell.item?.name {

        var attrs = [NSStrikethroughStyleAttributeName : 1]
        cell.textLabel?.attributedText = NSMutableAttributedString(string:"\(itemName)", attributes: attrs)
        cell.contentView.alpha = 0.5
        cell.backgroundColor = self.allTasksAreDone() ? UIColor.yellowColor() : UIColor.darkGrayColor()
    }
}

在Interface Builder中,单元格和内容视图的剪辑子视图都打开。它是一个基本风格的单元格。它发生在iOS 7和iOS 8中。

可能相关的是,在选中时,已完成的项目会移动/动画到底部。

当我从屏幕上滚出意外的浅灰色框并将其向后滚动到屏幕上时,我仍然看到意外的浅灰色框。

如果我注释掉设置单元格背景的行,我有时会得到这个。

unexpected box showing up

对于某些完成项目/单元格中出现的浅灰色框出现的情况有什么想法?


要求的附加代码。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell : ButtDTaskListTableViewCell = tableView.dequeueReusableCellWithIdentifier("TaskCell", forIndexPath:indexPath) as ButtDTaskListTableViewCell;

    cell.textLabel?.textColor = UIColor.whiteColor()

    let sortedByDoneStatus = !tableView.editing // self.sortByDoneStatus

    let item : ButtDTaskItem = taskManager.objectInListAtIndex(indexPath.row, sortedByDoneStatus:sortedByDoneStatus)
    cell.item = item

    indicateDoneStatusOnCell(cell, inEditMode:tableView.editing) // !tableView.editing

    return cell;
}

func indicateDoneStatusOnCell(cell : ButtDTaskListTableViewCell, inEditMode:Bool) {

    if let existingItem = cell.item? {

        if (!inEditMode && existingItem.isDone) {
            indicateAsDoneCell(cell)
        } else {
            indicateAsNotDoneCell(cell)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我通过在Interface Builder中设置以下内容来取消该框:

  • 表格视图中的“默认”背景颜色
  • Cell上的“默认”背景颜色
  • 内容视图中的“清除颜色”
  • 标签上的“默认”背景颜色。

数据源不再设置背景颜色,也不会更改alpha。 willDisplayCell方法在单元格上设置适当的backgroundColor。