Как отключить горизонтальную прокрутку UIScrollView?

У меня есть UIView как iPhone Springboard. Я создал его с помощью UIScrollView и UIButtons. Я хочу отключить горизонтальную прокрутку для указанного вида прокрутки. Я хочу только вертикальную прокрутку. Как мне это сделать?

Ответ 1

Вам нужно установить свойство contentSize для UIScrollView. Например, если ваш UIScrollView имеет ширину 320 пикселей (ширина экрана), вы можете сделать это:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

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

Ответ 2

ОБНОВЛЕНО: (после того, как @EranMarom указал на его комментарий)

Вы можете остановить горизонтальную прокрутку или вертикальную прокрутку в методе ScrollViewDelegate. Вот так,

Остановка горизонтальной прокрутки:

Если вы хотите прокручивать по горизонтали, вам нужно увеличить contentOffset.x. Предотвращение остановки прокрутки прокрутки в горизонтальном направлении.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

Остановка вертикальной прокрутки:

Если вы хотите прокручивать вертикально, вам нужно увеличить contentOffset.y. Предотвращение остановки прокрутки прокрутки в вертикальном направлении.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

Выше кода предотвращает изменения в x и y для scrollview contentOffset и приводит к остановке прокрутки в методе scrollViewDidScroll:.

Ответ 3

поскольку iOS7 использует

self.automaticallyAdjustsScrollViewInsets = NO;

//и создайте скроллер страницы с 3 страницами

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];

Ответ 4

Быстрое решение

Создайте два выхода: один для вашего просмотра и один для просмотра прокрутки:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

Затем в вашем viewDidLayoutSubviews вы можете добавить следующий код:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

Мы выполнили сборку высоты и ширины представления и установили размер содержимого scrollViews. Это приведет к прокрутке прокрутки по горизонтали.


Другие мысли:

CGSizeMake использует ширину и высоту с помощью CGFloats. Возможно, вам придется использовать существующую высоту UIScrollViews для второго параметра. Что будет выглядеть так:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)

Ответ 5

Вы можете выбрать представление, а затем Attributes Inspector снять отметку User Interaction Enabled.

Ответ 6

Как только я это заменил UIScrollView с помощью UITableView только с 1 ячейкой, он работал нормально.

Ответ 7

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

Однако в другом потоке (не уверен, где) кто-то предположил, что использование отрицательного ограничения на UIScrollView сработало для него.

Итак, я пробовал различные комбинации ограничений с несогласованными результатами. Что в конечном итоге сработало для меня, так это добавить ограничения на перемещение и перетаскивание -32 в scrollview и добавить (невидимое) текстовое представление с шириной 320 (и с центром).

Ответ 8

У меня был tableview contentInset, установленный в viewDidLoad (как показано ниже), что вызывает горизонтальную прокрутку

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

Проверьте, есть ли какой-либо файл tableview, установленный по разным причинам, и отключите его.

Ответ 9

Попробуйте следующее:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];

Ответ 10

Используйте эту одиночную строку.

self.automaticallyAdjustsScrollViewInsets = NO;

Ответ 11

В моем случае ширина contentView была больше ширины UIScrollView, и это было причиной нежелательной горизонтальной прокрутки. Я решил это, установив ширину contentView равной ширине UIScrollView.

Надеюсь, это поможет кому-то

Ответ 12

В моем случае с Swift 4.2 вы можете использовать:

Отключить вертикальную прокрутку:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.y = 0.0
}

Отключить горизонтальную прокрутку:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0.0
}