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


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

10 78

10 ответов:

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

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

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

обновление: (после того, как @EranMarom указал на его комментарий)

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

Останавливает Горизонтальную Прокрутку:

если вы хотите прокрутки по горизонтали, то вам нужно увеличить contentOffset.х. Допуская, что останавливает представление ScrollView прокрутки в горизонтальном направлении.

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

Остановка По Вертикали Прокрутка:

если вы хотите прокрутить по вертикали, то вам нужно увеличить contentOffset.г. Допуская, что останавливает представление ScrollView прокрутки в вертикальном направлении.

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

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

так как 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];

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

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

@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 в соответствии с ним. Это остановит ваш scrollview от прокрутки по горизонтали.


больше Мысли:

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

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

вы можете выбрать вид, а затем в разделе Attributes Inspector убрать User Interaction Enabled .

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

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

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

проверьте, есть ли какие-либо TableView contentInset набор по разным причинам и отключить его

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

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

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

Попробуйте Это:

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

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

self.automaticallyAdjustsScrollViewInsets = NO;