如何禁用UIScrollView的水平滚动?
我有一个像iPhone的跳板UIView
。 我用UIScrollView
和UIButtons
创build了它。 我想禁用所述滚动视图上的水平滚动。 我只想要垂直滚动。 我如何做到这一点?
你必须设置UIScrollView
的contentSize
属性。 例如,如果你的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
x
和y
发生更改,并且会导致停止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;