我希望特殊项目的行为与 Things 应用程序中的行为相同。我的意思是侧边栏底部的日志和垃圾箱项目:
日志和垃圾项目在最底部 http://tinyurl.com/lhctza
请建议在侧边栏树中实现相同功能的任何方法。
我觉得特殊的“间隔”树项目应该与outlineView:heightOfRowByItem:
方法一起使用。
但是,我找不到如何计算所有可见项目的总高度(包括组之间的空间)。
我希望特殊项目的行为与 Things 应用程序中的行为相同。我的意思是侧边栏底部的日志和垃圾箱项目:
日志和垃圾项目在最底部 http://tinyurl.com/lhctza
请建议在侧边栏树中实现相同功能的任何方法。
我觉得特殊的“间隔”树项目应该与outlineView:heightOfRowByItem:
方法一起使用。
但是,我找不到如何计算所有可见项目的总高度(包括组之间的空间)。
您可以尝试简单地拥有两个轮廓视图:一个是固定高度,固定在其父视图的底部,另一个是可变高度,其底部紧邻第一个视图的顶部。固定高度的大纲视图将包含那些日志和垃圾项目,而可变高度的大纲视图将包含所有其他项。
棘手的部分是通过滚动视图使这个游戏很好,但我认为你可以做到。我想你会把它们都放在一个完全可调整大小的 NSView 中,并使其成为滚动视图的文档视图。
我决定通过为组样式中的每个根项添加 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);
}
感谢大家的支持!