Я сделал что-то подобное некоторое время назад, и я сделал это на контроллере, а не на подклассе (извините, если это не то, что вы ищете). По сути, я написал метод, который вычислял высоту таблицы, добавляя высоту всех строк. И каждый раз, когда я добавлял или удалял строку из таблицы, я вызывал этот метод. Вот кое-что, с чего можно начать:
- (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
}
Поскольку это не задокументировано, я не могу обещать, что это сработает, но, судя по моим испытаниям, это работает. И это может быть быстрее, чем создавать представления только для получения их высоты, особенно если у вас много строк.
person
Alex
schedule
18.11.2012