2009-08-25 28 views
5

我想在Things应用程序中完成与特殊项目相同的行为。我的意思是日志垃圾在侧边栏的底部项目:如何将NSOutlineView的最后一个树项保留在边栏的最底部?

Logbook and Trash items are in the most bottom http://tinyurl.com/lhctza

请告知任何方式来实现在侧边栏树相同的功能。

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

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

回答

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); 
} 

感谢大家的支持!

3

你可以尝试简单地有两个轮廓视图:一个固定高度,固定在他们的超级视图的底部,另一个高度可变,其底部紧靠第一个顶部。固定高度的大纲视图将包含这些日志和垃圾箱项目,可变高度大纲视图将包含所有其他项目。

棘手的部分将使这个游戏很好的滚动视图,但我认为你可以做到这一点。我想你会把它们都放在一个完全可调整大小的NSView中,并使该滚动视图的文档视图。

+0

+1。我已经看到其他列表(例如帐户前期面板中的登录选项)以这种方式复制。 – iKenndac 2009-08-25 12:04:58

+0

但是,您还应该管理滚动状态和2个视图,但是缩进级别,下一个响应者,某些热键等问题仍然存在:) – Stream 2009-08-25 14:55:18

+0

如果这些是顶级项目,缩进级别不应更改。不过,关于响应者链的好处。 – 2009-08-25 20:14:57

相关问题