Как отключить горизонтальную прокрутку UIScrollView?
у меня есть UIView
как трамплин iPhone. Я создал его с помощью UIScrollView
и UIButtons
. Я хочу, чтобы отключить горизонтальную прокрутку на указанное представление ScrollView. Я хочу только вертикальную прокрутку. Как мне это сделать?
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)
Как только я сделал это, заменив UIScrollView на UITableView только с 1 ячейкой, он работал нормально.
У меня был TableView contentInset, установленный в viewDidLoad (как показано ниже), что вызывает горизонтальную прокрутку
self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);
проверьте, есть ли какие-либо TableView contentInset набор по разным причинам и отключить его
Я боролся с этим в течение некоторого времени, безуспешно пытаясь различные предложения в этом и других потоках.
однако в другом потоке (не уверен, где) кто-то предположил, что использование отрицательного ограничения на UIScrollView сработало для него.
поэтому я пробовал различные комбинации ограничений с противоречивыми результатами. Что в конечном итоге сработало для меня, так это добавить ведущие и конечные ограничения -32 в scrollview и добавить (невидимый) textview с помощью ширина 320 (и по центру).