Как остановить UIScrollView от прыгания по горизонтали?

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

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

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

Ответ 1

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

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

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

Ответ 2

scrollView.bounces = NO;

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

Ответ 3

Попробуйте установить scrollView.bounces на NO и scrollView.alwaysBounceVertical на YES.

Ответ 4

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

enter image description here

Ответ 5

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

scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false

Ответ 6

Независимо от того, просматривается ли свиток (и отскакивает) по горизонтали, зависит от трех вещей:

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

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

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

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

}

Ответ 10

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

Swift:

scrollView.horizontalScrollElasticity = false

Objective-C:

scrollView.horizontalScrollElasticity = NO