Одно из решений - спросить их! Особенно в системах участников, где вы можете захватить / зарегистрировать пользователя - предоставьте им выбор на этом этапе. Просто, но точно.
Вы пробовали эти 2 метода?
На самом деле они применяются к «прокрутке», а не только к смещению содержимого.
[self.tableView scrollToRowAtIndexPath:savedIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
ИЛИ:
[self.tableView scrollRectToVisible:savedFrame animated:NO];
Они действительно должны влиять на прокрутку и, соответственно, ускорение стола, а не только того, что видно на экране.
Вы пробовали использовать [view setContentOffset: смещение анимированного: ДА]
?
Вы можете подождать, пока свойство «замедление» станет НЕТ (например, с помощью KVO), и после этого переключиться.
Одним из очевидных способов решения проблемы является наличие двух отдельных табличных представлений, которые меняются местами, и каждый источник данных постоянно прикреплен к одному из табличных представлений. Это показалось мне пустой тратой памяти, но, возможно, я слишком много думаю об этом.
Вы можете попробовать сделать
tableView.scrollEnabled = NO;
tableView.scrollEnabled = YES;
Это может остановить прокрутку, отключив ее, а затем разрешить очередной раз. Я не пробовал это специально, но делал похожие вещи.
Я использовал подход Кори. Сохраняю и восстанавливаю прямоугольники со словарным представлением. Кроме того, это может быть неочевидно, но прямоугольник для сохранения и восстановления - это границы UITableView:
// Save the current tableview bounds
CGRect contentRect = self.listTableView.bounds;
if (!!oldScope) [_contentRects setObject:(NSObject *)CGRectCreateDictionaryRepresentation(contentRect) forKey:oldScope];
// Restore if possible
CFDictionaryRef restoredFrameDict = (CFDictionaryRef)[_contentRects objectForKey:newScope];
if (!restoredFrameDict) restoredFrameDict = CGRectCreateDictionaryRepresentation(CGRectZero);
CGRectMakeWithDictionaryRepresentation(restoredFrameDict, &contentRect);
// Switch over to new datasource
self.listTableView.dataSource = [self dataSourceForScope:newScope];
[self.listTableView reloadData];
// Restore content offset for "newScope"; Also stops scrolling
[self.listTableView scrollRectToVisible:contentRect animated:NO];
Обратите внимание на взаимозаменяемое использование CFDictionaryRef
и NSDictionary *
Только что нашел это в поисках способа остановить мой UIScrollView - мне нужно было переместить некоторые подпредставления, но эта рана выглядела некорректно, если бы пользователь щелкнул по экрану, а скорость все еще замедлялась.
В любом случае - scrollRectToVisible
у меня не сработало (может быть, потому, что я не использую табличное представление ??), но это сработало отлично:
[mainScrollView setContentOffset:CGPointMake(mainScrollView.contentOffset.x, mainScrollView.contentOffset.y) animated:NO];
Я могу без проблем работать с подпредставлением!