2017-02-08 5 views
0

NSTableViewで独自の列サイズ変更スキームを実装したいと思います。これは主に動作しますが、垂直スクロールバーの動的な外観に苦しんでいます。NSTableViewを使用したカスタムcolumnAutoresizingStyle

2つの列を持つテーブルを作成したいとします。最初の列は常に1/3、もう一方は可視領域の残りの2/3を占めます。

私は次のようにNSTableViewのサブクラスでtile方法を実装することによって、これを達成しようとしました:

- (void)tile 
{ 
    NSClipView *container = (NSClipView*) self.superview; 

    NSSize spacing = self.intercellSpacing; 
    CGFloat avail = container.frame.size.width; 
    CGFloat cw0 = (int) (avail/3); 
    CGFloat cw1 = avail - cw0; 
    self.tableColumns[0].width = cw0 - spacing.width; 
    self.tableColumns[1].width = cw1 - spacing.width; 

    [super tile]; 
} 

私はスクロールバーが必要に応じて追加されます持っている[super tile]を呼び出すために持っていると信じています。

ただし、ウィンドウのサイズを変更してTableViewのサイズを変更すると、水平スクロールバーがクリップビューの一部になることがあり、ちらつきが発生することがあります。ここで

は、ウィンドウのサイズを変更するときに私が取得する例を示します。

良い結果:

good resize example

悪い結果(水平スクロールバーがあるという事実に注意してください):

bad resize example

ウィンドウのサイズを変えずに、テーブルビューでは水平スクロールバーが表示されます。これは私が避けたいものです。

オリジナルのtile関数がこれをどのように処理するのだろうかと思います。どのように私はそれがちらつきを取得しないように有効にしますが、必要に応じてスクロールバーが表示されますか?

+0

' - [NSTableView] sizeLastColumnToFit'をオーバーライドしますか? – Willeke

答えて

0

ソリューションはかなり簡単だったが判明:

私はテーブルビューのcolumnAutoresizingStyleNSTableViewNoColumnAutoresizingにを設定していたことを言及している必要があります - 私は私自身のサイズ変更を管理したかったので、それゆえ私はのAppKitの処理を有効にする必要があるだろうと仮定オフ。

いいえ - 私はそれをNSTableViewLastColumnOnlyAutoresizingStyleに設定し、意図したとおりに動作する必要があります。

また、[super tile];を関数の先頭に移動しました。

関連する問題