2009-08-25 59 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

相關問題