objective-c – 从NSOutlineView中删除几个级别的缩进

我有一个大纲视图,我不想缩进顶级夫妇级别(他们有一个独特的外观),但我确实想缩进后续级别.我怎样才能做到这一点?

我已经尝试重写-levelForRow:和-levelForItem:从返回值中减去2,但这没有帮助.我也尝试重写-frameOfOutlineCellAtRow:从帧的宽度中减去2 * indentationPerLevel,但这也没有帮助,可能是因为我没有显示显示三角形.有关如何解决此问题的任何想法?

大纲视图绑定到NSTreeController,这使得难以展平底层数据结构,但我确实设置了大纲视图委托.

解决方法

解决方案是使用frameOfCellAtColumn:row:这是一个NSTableView方法.
- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row;
{
    NSRect frame = [super frameOfCellAtColumn:column row:row];

    if (column == (NSInteger)[self.tableColumns indexOfObjectIdenticalTo:self.outlineTableColumn]) {
        if (this-item-or-row-matches-your-conditions) {
            frame.origin.x -= self.indentationPerLevel;
            frame.size.width += self.indentationPerLevel;
        }
    }

    return frame;
}

此方法控制基于单元格和基于视图的表视图和大纲视图中的布局.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...