如何将NSOutlineView的最后一个树项保留在补充工具栏的最底部?

Vad*_*dim 5 tree cocoa sidebar nsoutlineview outline-view

我想要在Things应用程序中完成与特殊项目相同的行为.我的意思是补充工具栏底部的日志垃圾项目:

日志和垃圾箱项目位于最底层http://tinyurl.com/lhctza

请建议以任何方式在侧栏树中实现相同的功能.

我觉得特殊的'spacer'树项应该与outlineView:heightOfRowByItem:方法一起使用.

但是,我找不到如何计算所有可见项目的总高度(包括组之间的空间).

Vad*_*dim 1

我决定通过为组样式中的每个根项添加 8 个像素的高度来硬编码该解决方案。所以,代码如下所示:

- (CGFloat)outlineView:(NSOutlineView *)ov heightOfRowByItem:(id)item;
{
    if (![item isSpacer]) return [ov rowHeight];

    static const CGFloat ADDITIONAL_SPACE = 8.0f;
    NSUInteger numberOfRootGroups = 2;
    CGFloat heightOfRows = [ov rowHeight] * ([ov rowForItem:item] + 1) 
        + ADDITIONAL_SPACE * numberOfRootGroups;
    CGFloat heightOfSidebar = [[ov superview] frame].size.height;
    return MAX(0.0f, heightOfSidebar - heightOfRows);
}

感谢大家的支持!