gpt4 book ai didi

ios - 如何为 UITableViewCell 的 .selectedBackgroundView 设置自定义边距

转载 作者:行者123 更新时间:2023-11-28 09:03:54 26 4
gpt4 key购买 nike

我正在使用 TableView 来显示树结构。每个单元格对应一个用户可以展开或折叠的节点。每个节点的级别通过在单元格的前缘具有越来越大的缩进来可视化。这些缩进是使用 layoutMargins 设置的。这似乎适用于单元格的标签和分隔符。这是一些代码:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let cellLevel = cellLevelForIndexPath(indexPath)
let insets: UIEdgeInsets = UIEdgeInsetsMake(0.0, CGFloat(cellLevel) * 20.0, 0.0, 0.0)

cell.separatorInset = insets
cell.layoutMargins = insets
}

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

var cell = tableView.dequeueReusableCellWithIdentifier("cellId") as? UITableViewCell
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cellId")
}

cell!.preservesSuperviewLayoutMargins = false
cell!.backgroundColor = UIColor.clearColor()

let cellLevel = cellLevelForIndexPath(indexPath)
if let textlabel = cell!.textLabel {
textlabel.text = "Cell @ level \(cellLevel)"
textlabel.textColor = UIColor.blackColor()
}

cell!.selectedBackgroundView = UIView(frame: CGRectZero)
cell!.selectedBackgroundView.backgroundColor = UIColor.cyanColor()

return cell!
}

生成的表格如下所示:

Not what I want :(

我现在面临的问题是:如何优雅地将相同的缩进应用于单元格的 .selectedBackgroundView,使其与文本和分隔线齐平?最终结果应如下所示:

What I want :)

注意:我目前正在通过使 .selectedBackgroundView 更复杂并添加不同大小的背景色 subview 来有效地掩盖部分单元格,例如像这样:

let maskView = UIView(frame: CGRectMake(0.0, 0.0, CGFloat(cellLevel) * 20.0, cell!.bounds.height))
maskView.backgroundColor = tableView.backgroundColor
cell!.selectedBackgroundView.addSubview(maskView)

但我强烈认为必须有更好的方法来做到这一点。

最佳答案

想出一个方法让它发挥作用。对我来说,诀窍是停止将 .selectedBackgroundView 视为可见高光本身(并因此尝试遮盖或调整它的大小),而是将其更像是 Canvas 。

这就是我最终做的事情。首先是为每个级别获取适当的插图的更方便的方法:

let tableLevelBaseInset = UIEdgeInsetsMake(0.0, 20.0, 0.0, 0.0)

private func cellIndentForLevel(cellLevel: Int) -> CGFloat {
return CGFloat(cellLevel) * tableLevelBaseInset.left
}

然后在 cellForRowAtIndexPath 中:

cell!.selectedBackgroundView = UIView(frame: CGRectZero)
cell!.selectedBackgroundView.backgroundColor = UIColor.clearColor()

let highlight = UIView(frame: CGRectOffset(cell!.bounds, cellIndentForLevel(cellLevel), 0.0))
highlight.backgroundColor = UIColor.cyanColor()
cell!.selectedBackgroundView.addSubview(highlight)

似乎工作得很好。

关于ios - 如何为 UITableViewCell 的 .selectedBackgroundView 设置自定义边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31322667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com