私はしばらく前に似たようなことをしましたが、サブクラスではなくコントローラーで行いました(探しているものではない場合は申し訳ありません)。基本的に、すべての行の高さを追加してテーブルビューの高さを計算するメソッドを作成しました。そして、テーブルに行を追加または削除するたびに、そのメソッドを呼び出します。これがあなたが始めるための何かです:
- (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
}
これは拡張されていないので、動作することを約束することはできませんが、これまでの私のテストからは動作します。また、特に行が多い場合は、高さを取得するためだけにビューを作成するよりも高速な場合があります。