如何在iOS中锁定scrollView的水平滚动

A f*_*pha 25 iphone uiscrollview horizontal-scrolling ipad

我有一个scrollView.我希望它只在一个方向滚动(垂直).有没有办法可以锁定水平滚动... ?? ...

mer*_*nix 26

同样(适应)的答案,如:

在UIScrollView中禁用垂直滚动

对,这里的所有答案都可以......

但是如果由于某些奇怪的原因你的contentSize应该高于 UIScrollView两个维度,你可以禁用实现UIScrollView协议方法的水平滚动-(void)scrollViewDidScroll:(UIScrollView *)aScrollView

只需将此添加到您的 UIViewController

float oldX; // here or better in .h interface

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(oldX, aScrollView.contentOffset.y)];
    // or if you are sure you wanna it always on left:
    // [aScrollView setContentOffset: CGPointMake(0, aScrollView.contentOffset.y)];
}
Run Code Online (Sandbox Code Playgroud)

它只是用户滚动你时调用的方法UIScrollView,这样做会强制它的内容始终相同.x


Sea*_*Lee 13

self.scrollview.contentSize = CGSizeMake(1, self.scrollview.frame.size.height * number_of_items);
Run Code Online (Sandbox Code Playgroud)

应该有所帮助 我只是通过类似的技术水平锁定我的滚动视图.


Mik*_*Hay 10

我发现限制滚动视图移动的最安全和最成功的方法是子类UIScrollView并覆盖setContentOffset:animated:setContentOffset:方法(下面的代码).

覆盖这些方法的优点是它可以在任何UIKit代码开始对其执行操作之前直接更改请求的contentOffset,从而避免在scrollViewDidScroll:或其他UIScrollViewDelegate方法中修改contentOffset时可能发生的任何副作用.

创建新的子类只需要几分钟,它就像一个魅力.

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
    // restrict movement to vertical only
    CGPoint newOffset = CGPointMake(0, contentOffset.y);
    [super setContentOffset:newOffset animated:animated];
}

- (void)setContentOffset:(CGPoint)contentOffset {
    // restrict movement to vertical only
    CGPoint newOffset = CGPointMake(0, contentOffset.y);
    [super setContentOffset:newOffset];    
}
Run Code Online (Sandbox Code Playgroud)