Программно вынудите UIScrollView прекратить прокручивать для сидящего за одним столом представления с несколькими источниками данных

Одно из решений - спросить их! Особенно в системах участников, где вы можете захватить / зарегистрировать пользователя - предоставьте им выбор на этом этапе. Просто, но точно.

25
задан Corey Floyd 13 June 2009 в 03:34
поделиться

7 ответов

Вы пробовали эти 2 метода?

На самом деле они применяются к «прокрутке», а не только к смещению содержимого.

[self.tableView  scrollToRowAtIndexPath:savedIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];

ИЛИ:

[self.tableView  scrollRectToVisible:savedFrame animated:NO];

Они действительно должны влиять на прокрутку и, соответственно, ускорение стола, а не только того, что видно на экране.

19
ответ дан 28 November 2019 в 21:16
поделиться

Вы пробовали использовать [view setContentOffset: смещение анимированного: ДА] ?

13
ответ дан 28 November 2019 в 21:16
поделиться

Вы можете подождать, пока свойство «замедление» станет НЕТ (например, с помощью KVO), и после этого переключиться.

0
ответ дан 28 November 2019 в 21:16
поделиться

Одним из очевидных способов решения проблемы является наличие двух отдельных табличных представлений, которые меняются местами, и каждый источник данных постоянно прикреплен к одному из табличных представлений. Это показалось мне пустой тратой памяти, но, возможно, я слишком много думаю об этом.

0
ответ дан 28 November 2019 в 21:16
поделиться

Вы можете попробовать сделать

tableView.scrollEnabled = NO;
tableView.scrollEnabled = YES;

Это может остановить прокрутку, отключив ее, а затем разрешить очередной раз. Я не пробовал это специально, но делал похожие вещи.

-3
ответ дан 28 November 2019 в 21:16
поделиться

Я использовал подход Кори. Сохраняю и восстанавливаю прямоугольники со словарным представлением. Кроме того, это может быть неочевидно, но прямоугольник для сохранения и восстановления - это границы 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 *

2
ответ дан 28 November 2019 в 21:16
поделиться

Только что нашел это в поисках способа остановить мой UIScrollView - мне нужно было переместить некоторые подпредставления, но эта рана выглядела некорректно, если бы пользователь щелкнул по экрану, а скорость все еще замедлялась.

В любом случае - scrollRectToVisible у меня не сработало (может быть, потому, что я не использую табличное представление ??), но это сработало отлично:

[mainScrollView setContentOffset:CGPointMake(mainScrollView.contentOffset.x, mainScrollView.contentOffset.y) animated:NO];

Я могу без проблем работать с подпредставлением!

4
ответ дан 28 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: