26

私はscrollViewを持っています。一方向(垂直)にのみスクロールしたい。横スクロールをロックする方法はありますか...?? ...

4

10 に答える 10

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

これは、ユーザーが をスクロールするときに呼び出されるメソッドにすぎUIScrollViewません。そうすることで、コンテンツの内容が常に同じになるように強制されます。x

于 2011-03-11T11:05:26.633 に答える
13
self.scrollview.contentSize = CGSizeMake(1, self.scrollview.frame.size.height * number_of_items);

助けるべきです。同様の手法を実行して、スクロールビューを水平にロックしました。

于 2011-03-11T12:53:37.337 に答える
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];    
}
于 2011-05-13T13:44:08.403 に答える
2

あなたはこれを試すことができます、

self.ScrollView.contentSize = CGSizeMake(self.ScrollView.frame.size.width, 1450);

ここで1450は私のビューの高さです。

于 2011-12-05T11:26:01.617 に答える
2

この質問を参照してください。スクロール可能なサイズをビューの対応するサイズに設定して、スクロールするものがないようにする必要があります。

于 2011-03-11T10:17:31.090 に答える
2

UIScrollViewのcontentSizeプロパティがUIScrollViewの実際の幅と同じである場合、水平スクロールはできません。

水平スクロールが有効なときに水平スクロールを停止しますか?(つまり、contentSize実際のUIScrollViewの幅よりも広いですか?)「はい」の場合、なぜそれを実行したいのですか?

于 2011-03-11T10:18:31.870 に答える
1

scrollViewは、contentSizeの幅をscrollViewフレームよりも大きく設定した場合にのみ、水平方向にスクロールできます。contentSizeの幅をscrollviewと同じに設定すると、スクロールしません。例えば

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,100,100)] [scrollView setContentSize:CGSizeMake(100, 300)]

于 2011-03-11T10:20:16.893 に答える
1

ああ、iOS7以降はこれを使用しています(initWithNibNameで):

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];
于 2014-01-22T10:52:53.483 に答える
0

迅速

水平スクロールcontentOffset.x = 0を無効にする

   extension ViewController: UIScrollViewDelegate {
          func scrollViewDidScroll(_ scrollView: UIScrollView) {
            scrollView.contentOffset.x = 0//to lock horizontal scrolling
            //scrollView.contentOffset.y = 0//to lock vertical scrolling
        }
    }

さらに、スクロールインジケーターを無効にすることができます

  scrollView.showsHorizontalScrollIndicator = false//to disable HorizontalScrollIndicator
    scrollView.showsVerticalScrollIndicator = false//to disable VerticalScrollIndicator
于 2017-12-05T12:37:25.353 に答える