IB中有一个选项可以取消选中scrollview上的垂直滚动,但是似乎不起作用。
如何在代码中而不是IB中将scrollview设置为仅水平滚动而不垂直滚动?
Answers:
从iOS7开始:
首先:内容大小的宽度必须等于滚动视图的宽度
第二:在您的initWithNibName中:
self.automaticallyAdjustsScrollViewInsets = NO;
而已。
是的,pt2ph8的答案是正确的,
但是如果出于某种奇怪的原因,您的contentSize应该大于UIScrollView,则可以禁用实现UIScrollView协议方法的垂直滚动
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
只需将其添加到您的UIViewController中
float oldY; // here or better in .h interface
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
// or if you are sure you wanna it always on top:
// [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}
这只是用户滚动UIScrollView时调用的方法,这样做会强制其内容始终具有相同的.y
float oldY;
参考上面的代码。这是每个应用程序的C样式变量符号,必须将变量声明为控制器类的实例成员。
包括以下方法
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
并将滚动视图的内容大小宽度设置为等于滚动视图的宽度。
您需要在内容大小上传递0才能禁用所需的方向。
禁用垂直滚动
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
禁用水平滚动
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
我更新了内容大小以禁用垂直滚动,并且仍然可以滚动。然后我发现我也需要禁用垂直反弹,以完全禁用滚动。
也许有些人也有这个问题。
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
您必须已确认 UIScrollViewDelegate
aScrollView.delegate = self;
很多答案都包括将设置contentOffset
为0。我有一种情况,我想让scrollView内的视图居中。这为我做了工作:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}