TableViewController не запускает индикаторы прокрутки, даже если таблица больше, чем вид

У меня странная проблема с TableViewController. В документе говорится, что tableViewController имеет дело с методом  -flashScrollIndicators, когда таблица "негабаритных" относится к видимой области.

Мое приложение состоит из 3 навигационных контроллеров, загруженных в контроллер табуляции. Каждый контроллер навигации имеет в качестве контроллера корневого представления подкласс контроллера табличного представления. Каждая "модель" заполняется из файла plist, который загружает его содержимое в массив в -viewDIdLoad, а затем все передается в таблицу. Все загружается программно без IB.

Я обнаружил в своем приложении, что когда он загружает первое представление (навигационный контроллер с контроллером табличного представления как root), полоса прокрутки не мигает, даже если количество ячеек достаточно велико. Если я выбираю другую вкладку, которая загружает другой навигационный контроллер (с t.v.c. как root), полоса прокрутки снова не отображается. Когда я нажимаю вкладку, соответствующую загруженному первому навигационному контроллеру, мигает полоса прокрутки.

Итак, я попытался сделать его программным, но никак, код кажется простым:

[self.tableView flashScrollIndicators];

Я попытался представить его почти везде. Сначала в -viewDidLoad (как предлагается в документе), затем в viewDidAppear и в -viewWillAppear. Также попробовали использовать этот кодовый трэп, чтобы отобразить представление t.v.c. в виде таблицы.

[((UITableView*)self.view) flashScrollIndicators];

.. без результата.

Я начал искать образец Apple, и я обнаружил, что в Apple Table view пользовательский образец (тот, который отличается в разное время) не прокручивает и прокрутку. Протестировано как на сим, так и на устройстве.

Является ли ошибка?, есть ли правильный способ показать это программно? Кто-нибудь может мне помочь? С Уважением, Andrea

Ответ 1

Или более кратко:

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self.tableView performSelector:@selector(flashScrollIndicators) withObject:nil afterDelay:0];
}

Ответ 2

У меня была точно такая же проблема. В конце концов я обошел его, поместив задержанный селектор в метод viewDidAppear:. Странно, я могу установить его на 0 секунд, и он все равно отлично работает.

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self performSelector:@selector(flashTableScrollIndicators) withObject:nil afterDelay:0.0];
}

- (void)flashTableScrollIndicators
{
    [self.tableView flashScrollIndicators];
}

Ответ 3

Он не отображается, когда вы показываете названия разделов раздела.

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView; 

Ответ 4

Моим решением было отправить сообщение "flashScrollIndicators()" с небольшой задержкой, используя "dispatch_after":

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.4 * Double(NSEC_PER_SEC)))

dispatch_after(delayTime, dispatch_get_main_queue(), 
{ () -> Void in 
    myScrollView.flashScrollIndicators() 
})