如何禁用UIScrollView的水平滚动?

我有一个像iPhone的跳板UIView 。 我用UIScrollViewUIButtons创build了它。 我想禁用所述滚动视图上的水平滚动。 我只想要垂直滚动。 我如何做到这一点?

你必须设置UIScrollViewcontentSize属性。 例如,如果你的UIScrollView的宽度是320像素(屏幕宽度),那么你可以这样做:

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

UIScrollView将只能垂直滚动,因为它已经可以水平显示一切了。

更新:( @EranMarom在他的评论指出)

您可以停止 ScrollViewDelegate方法中的水平滚动或垂直滚动 。 这里是如何,

停止水平滚动:

如果你想水平滚动,那么你需要增加contentOffset.x。 防止停止scrollview水平滚动。

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

停止垂直滚动:

如果你想垂直滚动,那么你需要增加contentOffset.y。 防止停止scrollview垂直方向的滚动。

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

以上代码可以防止scrollview contentOffset xy发生更改,并且会导致停止scrollViewDidScroll: method中的滚动。

自iOS7使用

 self.automaticallyAdjustsScrollViewInsets = NO; 

//并创build3页的页面滚动条

  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]; 

迅速的解决scheme

创build两个网点,一个用于您的视图,一个用于您的滚动视图:

 @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) 

您可以select视图,然后在“ Attributes Inspector取消选中“ User Interaction Enabled

一旦我用UITableViewreplaceUIScrollView只有一个单元格,它工作正常。

我有tableview contentInset在viewDidLoad中设置(如下),导致水平滚动

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

检查是否有任何tableview contentInset由于不同的原因而被设置并禁用它

我努力了一段时间尝试在这个和其他线程的各种build议失败。

然而,在另一个线程(不知道在哪里)有人build议在UIScrollView上使用负面约束为他工作。

所以我尝试了不一致的结果约束的各种组合。 最后对我的工作是将-32的前后约束添加到scrollview中,并添加宽度为320(和居中)的(不可见的)文本视图。

尝试这个:

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

使用这一行。

self.automaticallyAdjustsScrollViewInsets = NO;