Как отключить горизонтальную прокрутку UIScrollView?
У меня есть UIView
например, Springboard от iPhone. Я создал его с помощью UIScrollView
и UIButtons
. Я хочу отключить горизонтальную прокрутку по указанному scrollview. Я хочу только вертикальную прокрутку. Как это сделать?
- Как заполнить фоновое изображение UIView
- SplitView как приложение Facebook на iPhone
- NSMutableArray addObject не влияет на счет?
- Ссылка с UITableViewCell на родительский UITableView?
- Невозможно добавить элементы в NSMutableArray ivar
- Метод доступа после завершения анимации UIImageView
- Проверка подлинности электронной почты на textField в iPhone sdk
- Понимание подсчета ссылок с помощью Cocoa и Objective-C
Вы должны установить свойство contentSize
UIScrollView
. Например, если ваш UIScrollView
имеет ширину 320 пикселей (ширина экрана), вы можете сделать это:
CGSize scrollableSize = CGSizeMake(320, myScrollableHeight); [myScrollView setContentSize:scrollableSize];
Затем UIScrollView
будет прокручивать только по вертикали, потому что он уже может отображать все по горизонтали.
ОБНОВЛЕНО: (После того, как @EranMarom указал на его комментарий)
Вы можете остановить горизонтальную прокрутку или вертикальную прокрутку в методе ScrollViewDelegate
. Вот как это делается,
Остановка горизонтальной прокрутки:
Если вы хотите прокручивать по горизонтали, вам нужно увеличить contentOffset.x. Предотrotation остановки прокрутки прокрутки в горизонтальном направлении.
- (void)scrollViewDidScroll:(UIScrollView *)sender { sender.contentOffset.x = 0.0 }
Остановка вертикальной прокрутки:
Если вы хотите прокручивать по вертикали, вам нужно увеличить contentOffset.y. Предотrotation остановки прокрутки прокрутки в вертикальном направлении.
- (void)scrollViewDidScroll:(UIScrollView *)sender { sender.contentOffset.y = 0.0 }
Над кодом предотвращает изменения в x
и y
scrollview contentOffset
и это приводит к остановке прокрутки в scrollViewDidScroll:
method.
поскольку использование 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. Это приведет к прокрутке прокрутки по горизонтали.
Больше мыслей:
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, установленный по разным причинам, и отключите его
Я боролся с этим в течение некоторого времени, безуспешно пытаясь использовать различные предложения в этом и других streamах.
Однако в другом streamе (не уверен, где) кто-то предположил, что использование отрицательного ограничения на UIScrollView сработало для него.
Поэтому я пробовал различные комбинации ограничений с несогласованными результатами. В конечном итоге я работал над тем, чтобы добавить в список прокрутки ведущие и конечные ограничения -32 и добавить (невидимое) текстовое представление с шириной 320 (и центрированной).
Попробуй это:
CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight); [scrollView setContentSize: scrollSize];
Используйте эту единственную строку.
self.automaticallyAdjustsScrollViewInsets = NO;