Как отключить горизонтальную прокрутку UIScrollView? - PullRequest
83 голосов
/ 30 июня 2009

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

Ответы [ 12 ]

119 голосов
/ 30 июня 2009

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

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

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

85 голосов
/ 09 июня 2013

ОБНОВЛЕНО: (После того, как @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:.

10 голосов
/ 03 сентября 2015

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

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

@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)
10 голосов
/ 22 января 2014

, так как 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 голосов
/ 07 ноября 2016

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

0 голосов
/ 18 июня 2019

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

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

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

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

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0.0
}
0 голосов
/ 31 октября 2018

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

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

0 голосов
/ 06 октября 2017

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

self.automaticallyAdjustsScrollViewInsets = NO;

0 голосов
/ 19 августа 2017

Попробуйте:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];
0 голосов
/ 22 мая 2017

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

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

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

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