Если ваш tableFooterView
наблюдает за изменениями свойства таблицы contentOffset
(и, возможно, изменениями в свойстве таблицы contentSize
), вы можете точно рассчитать, когда он прокручивается в представление со следующими переменными:
tableView.contentOffset.y
- Вертикальная величина, на которую начало представления содержимого смещается относительно начала представления прокрутки
tableView.contentSize.height
- Высота просмотра содержимого
tableView.bounds.size.height
- Высота границ таблицы
Если вертикальное смещение содержимого + высота границ таблицы превышают высоту размера содержимого таблицы, мы можем предположить, что нижний колонтитул теперь виден.
Вы можете заключить это в оператор if и использовать его для отправки уведомления. Затем вы можете выполнить дальнейшее тестирование, чтобы нижний колонтитул тоже динамически растягивался, или другие предполагаемые эффекты:
if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){
//send notification, dynamic resizing, etc...`
}
Вот небольшой фрагмент кода в действии:
// Set up an observer for changes in the table's contentOffset or contentSize.
// This can be done during initialisation of the tableFooterView
[tableView addObserver:self
forKeyPath:@"contentOffset"
options:NSKeyValueObservingOptionNew
context:NULL];
[tableView addObserver:self
forKeyPath:@"contentSize"
options:NSKeyValueObservingOptionNew
context:NULL];
// Further down in code, listen for the changes:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"contentOffset"] ||
[keyPath isEqualToString:@"contentSize"]) {
if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){
// the tableFooterView should now be in view
[[NSNotificationCenter defaultCenter]
postNotificationName:@"scrollToLoadNeedsLoad"
object:self];
// dynamically change the footer here (ideal for making it stretch with the table)
}
}
}
Вы можете реализовать это внутри контроллера представления, который содержит ссылку на таблицу, или вы можете инкапсулировать его в свой собственный ScrollToLoadView.