Хотя я не люблю KVO (Key-Value Observing), это довольно хороший способ точно узнать, когда contentSize
вашей таблицы изменился (вместо того, чтобы просто вызывать ваши методы обновления в куче случайных мест). Это довольно просто в использовании (хотя и несколько загадочно и неявно). Чтобы наблюдать изменения в таблице contentSize
, выполните следующие действия:
1) Станьте наблюдателем свойства contentSize
вашего стола, например:
[self.tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:NULL];
Обычно это делается в контроллере вида, который содержит tableView
(как, например, в viewDidLoad:
).
2) Реализуйте метод наблюдения КВО и внесите необходимые изменения:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
if(object == self.tableView && [keyPath isEqualToString:@"contentSize"]) {
// perform your updates here
}
}
3) Удалите ваш контроллер вида как наблюдателя в некоторой логической точке (я называю это в dealloc
). Вы делаете это так:
- (void)dealloc {
[self.tableView removeObserver:self forKeyPath:@"contentSize"];
}