4

NSTableViewがあり、行が追加されたときにフレームのサイズを変更する必要があります。maxHeightとminHeightの2つのプロパティを作成し、行が追加または削除されている場合、制限を超えない限り、コンテンツに合わせてテーブルビューのサイズを変更します。

Safariダウンロードパネル(10.7以降)のように。誰かがこれを行う方法を考えていますか?これをサブクラスで処理したいと思います。したがって、デリゲートクラスのサイズ変更をいじることはありません。

少なくとも、テーブルビューがリロードされているときにどのメソッドが呼び出されているかを知る必要があります。reloadTableは実際のリロードメソッドのみを呼び出すため、そこでは成功しません。

4

1 に答える 1

4

私はしばらく前に似たようなことをしましたが、サブクラスではなくコントローラーで行いました(探しているものではない場合は申し訳ありません)。基本的に、すべての行の高さを追加してテーブルビューの高さを計算するメソッドを作成しました。そして、テーブルに行を追加または削除するたびに、そのメソッドを呼び出します。これがあなたが始めるための何かです:

- (void)adjustTableSize
{
    NSInteger minHeight = ...
    NSInteger maxHeight = ...

    NSInteger tViewHeight = 0;
    for (int i = 0; i < [tableView numberOfRows]; i++) {
        NSView* v = [tableView viewAtColumn: 0 row: i makeIfNecessary: YES]; // Note that this is for view-based tableviews
        tViewHeight += v.frame.size.height;
    }

    NSInteger result = MIN(MAX(tViewHeight, minHeight), maxHeight);

    // Do something with result here
}

サブクラスで本当に必要な場合は可能ですが、方法を理解するのは面倒かもしれません...

編集:

非拡張APIを使用してもかまわない場合は、次の簡単なバージョンを使用してください。

- (void)adjustTableSize
{
    NSInteger minHeight = ...
    NSInteger maxHeight = ...
    NSInteger result = MIN(MAX([tableView _minimumFrameSize].height, minHeight), maxHeight);

    // Do something with result here
}

これは拡張されていないので、動作することを約束することはできませんが、これまでの私のテストからは動作します。また、特に行が多い場合は、高さを取得するためだけにビューを作成するよりも高速な場合があります

于 2012-11-18T22:07:01.320 に答える