У меня есть UIView
как iPhone Springboard. Я создал его с помощью UIScrollView
и UIButtons
. Я хочу отключить горизонтальную прокрутку для указанного вида прокрутки. Я хочу только вертикальную прокрутку. Как мне это сделать?
Как отключить горизонтальную прокрутку UIScrollView?
Ответ 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
}