2009-08-25 2 views
5

私は、Thingsアプリケーションで行われたのと同じ特殊なアイテムの動作をしたいと思います。私は、サイドバーの下部にログブックゴミ箱項目を意味:NSOutlineViewの最後のツリー項目をサイドバーの最下部に残すにはどうすればいいですか?

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

サイドバーのツリーで同じ機能を実装する方法を教えてください。

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

単純に2つのアウトラインビューを持つことができます:固定高さの1つ、スーパービューの下部に固定された可変高さの可変ビュー、および可変高さのもう一方は、最初の上部のすぐ上にあります。固定高さのアウトラインビューにはログブックとごみ箱の項目が含まれ、可変長のアウトラインビューには他のすべての項目が含まれます。

スッキーな表示でこの演奏をうまくやってくれるという難しい部分がありますが、私はそれができると思います。私はあなたが完全にサイズ変更可能なNSViewにそれらを置くと、スクロールビューのドキュメントビューにすると思います。

+0

+1。私は、このようにして複製された他のリスト(Accountsの前のページのLogin Optionsアイテムのようなもの)を見てきました。 – iKenndac

+0

しかし、スクロール状態と2つのビューだけでなく、インデントレベル、次のレスポンダ、ホットキーなども管理する必要があります。 – Stream

+0

これらのアイテムがトップレベルのアイテムである場合は、インデントレベルを変更すべきではありません。しかし、レスポンダーチェーンについての良い点です。 –

関連する問題