Как мне остановить UIScrollView от горизонтального подпрыгивания? - PullRequest
12 голосов
/ 06 октября 2008

У меня есть UIScrollView, который показывает вертикальные данные, но где горизонтальный компонент не шире, чем экран iPhone. Проблема заключается в том, что пользователь все еще может перетаскивать его по горизонтали и в основном отображать пустые разделы пользовательского интерфейса. Я пробовал установить:

scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;

Это немного помогает, но все же не мешает пользователю перетаскивать по горизонтали. Наверняка есть способ это легко исправить?

Ответы [ 11 ]

18 голосов
/ 31 марта 2014
scrollView.bounces = NO;

работал для меня.

14 голосов
/ 06 октября 2008

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

// Should scroll vertically but not horizontally
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
scrollView.contentSize = CGSizeMake(320, 1000);

Вы уверены, что рамка полностью помещается на экране и ширина contentSize не больше ширины прокрутки?

7 голосов
/ 19 января 2013

Флажок для вертикального отскока в режиме раскадровки-прокрутки может просто помочь ...

enter image description here

6 голосов
/ 06 октября 2008

Попробуйте установить для scrollView.bounces значение NO, а для scrollView.alwaysBounceVertical - значение YES.

4 голосов
/ 10 ноября 2016

Это работает для меня в Swift:

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false
2 голосов
/ 19 января 2013

Горизонтальная прокрутка (или отскок) вида зависит от трех факторов:

  • Размер содержимого
  • Левый и правый контент вставки
  • Ширина вида прокрутки -

Если представление прокрутки может соответствовать размеру контента плюс вставки, то оно не прокручивается и не отскочит

Избегайте горизонтального подпрыгивания, например:

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height);

Я добавляю этот ответ, потому что предыдущие не учитывали contentInset.

1 голос
/ 07 октября 2008

Убедитесь, что contentSize UIScrollView не шире, чем сам UIScrollView. В моих собственных приложениях этого было достаточно, чтобы избежать горизонтальной прокрутки, за исключением случаев, когда я действительно сумасшедший проводил в случайных направлениях (например, запускаю прокрутку, пока вид все еще замедлялся).

0 голосов
/ 07 января 2019

В моем случае мне просто нужно установить эту строку:

collectionView.bounces = false

0 голосов
/ 09 августа 2016

Если кто-то, разрабатывающий для OS X, ищет здесь, начиная с OS X 10.7, решение состоит в том, чтобы установить для свойства horizontalScrollElasticity значение false / NO в представлении прокрутки, например так:

Swift:

scrollView.horizontalScrollElasticity = false

Objective-C:

scrollView.horizontalScrollElasticity = NO
0 голосов
/ 08 июня 2012

Моя версия для webViews, общее решение:

- (void)webViewDidFinishLoad:(UIWebView *)webView {

[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...