2010-01-07 4 views
23

У меня есть UIScrollView, который я создаю и размер динамически, используя ...UIScrollView не показывает индикатор прокрутки

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width , length); 

Я затем добавить subviews к UIScrollView. У меня есть scrollView.showsVerticalScrollIndicator = YES;

При прокрутке индикатор прокрутки никогда не появляется.

Даже если я позвоню [scrollView flashScrollIndicators], ничего не произойдет.

Идеи?

+0

Выглядит хорошо. Уверен, что вы не устанавливаете его где-то еще в НЕТ? –

ответ

66

Если бы та же проблема, и не мог найти причину. Последний ответ дал окончательный намек: всякий раз, когда я добавлял новые subviews, я сначала удалил все существующие подпрограммы из scrollview (и, по-видимому, также и индикаторы прокрутки).

После проверки в моем цикле, если подтаблицы действительно были из рода я хотел удалить индикаторы прокрутки обнаружились:

for (NSObject * subview in [[[scrollView subviews] copy] autorelease]) { 
    if ([subview isKindOfClass:[MySubView class]]) { 
     [(MySubView*)subview removeFromSuperview]; 
    } 
} 

Update: изменил код на предложение Николая

+2

В этом коде есть тонкая ошибка: метод UIView 'subviews' возвращает исходный массив подзонов, используемых представлением. Это означает, что вышеуказанный код мутирует массив, итерации по нему. Простое исправление: итерация над [[[[scrollView subviews] копия] autorelease] ' –

+0

wow .. этот ответ решил 2 ошибки за раз :) спасибо: D –

+0

Это идеальное решение, спасибо – RVN

0

Заметил это, когда UIScrollView составлял горизонтальную полосу шириной 48 пикселей, прокручиваемую горизонтально. Возможно, Cocoa решает, что область слишком мала для индикатора прокрутки ...

+0

В этом случае scrollview в несколько раз больше длины экрана и точно ширины экрана. – George

14

Когда я имел дело с этим раньше, в моей реализации сетки я бы иногда получал некоторые ячейки над верхней частью индикатора прокрутки. Чтобы исправить это, я теперь вставляю subviews в индекс 0, а не добавляю их, что добавляет их в начало. Так что попробовать что-то вроде этого:

[scrollview insertSubview:subview atIndex:0];

+0

Есть ли вероятность аналогичного решения для 'UICollectionView'? – rounak

1

Она также будет (по крайней мере, в случае UITableView), если contentSize слишком мал для прокрутки таблицы. Если вы включили подпрыгивание, тогда табличное представление фактически не прокручивается и не отображает индикаторы. Попробуйте установить больше контента внутри.

8

исправить это, добавив следующий код после добавления нового подвид:

self.showsVerticalScrollIndicator = NO; 
self.showsVerticalScrollIndicator = YES; 
+0

Это и содержание, охватывающее мои индикаторы, было корнем проблемы, с которой я столкнулся. – jbierling

2

Это может произойти также, если родитель Scrollview является меньше по горизонтали, чем сам взгляд прокрутки:

СВИТОК бар застревает с правой стороны от ScrollView/TableView, и эта правая сторона не видна из-за границ родителей (с помощью clipToBounds, например, для этого).

Я видел эту проблему, поэтому я делюсь ею, если она может помочь.

Просто проверьте ширину рамки ScrollView, чтобы она не превышала ширину его родительской рамы.

10

Для меня горизонтальный индикатор загадочно исчез в моем приложении на iOS 7. Позже выяснилось, что по какой-то странной причине мне пришлось активировать как Shows Horizontal Indicator, так и Shows Vertical Indicator, чтобы показать горизонтальное отображение. Если я установил, чтобы он не показывал вертикальный индикатор, он также не показывал бы горизонтальный индикатор.

enter image description here

+1

Sigh .. первый мир iOS7 проблемы. Это исправило мою проблему. –

0

Два условия,

  1. Если вы используете раскадровки
  2. Если вы используете UITableView внутри UIViewController

Затем вы должны проверить индикатор врезки установлены на 0 (или любое другое число, относящееся к вашему автозапуску):

enter image description here

Смежные вопросы