web-dev-qa-db-ja.com

UIScrollViewで垂直スクロールを無効にする

IBには、スクロールビューの垂直スクロールをオフにするオプションがありますが、機能していないようです。

IBではなく、垂直方向ではなく水平方向にのみスクロールするようにスクロールビューを設定するにはどうすればよいですか?

83
jarryd

ContentSizeの高さをscrollViewの高さに設定してみてください。次に、垂直にスクロールするものがないため、垂直スクロールを無効にする必要があります。

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
118
pt2ph8

iOS7以降:

最初:コンテンツサイズの幅は、スクロールビューの幅と等しくなければなりません

2番目:initWithNibNameで:

self.automaticallyAdjustsScrollViewInsets = NO;

それでおしまい。

137
Mirko Brunner

はい、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を持たせることができます。

49
meronix

次の方法を含める

-(void)viewDidLayoutSubviews{
    self.automaticallyAdjustsScrollViewInsets = NO;
}

スクロールビューのコンテンツサイズの幅をスクロールビューの幅に設定します。

22
Febin P

必要な方向を無効にするには、コンテンツサイズに0を渡す必要があります。

垂直スクロールを無効にするには

scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);

水平スクロールを無効にするには

scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
19
Mani

コンテンツサイズを更新して垂直スクロールを無効にしましたが、スクロール機能はまだ残っていました。次に、スクロールを完全に無効にするために、垂直バウンスも無効にする必要があることがわかりました。

この問題を抱えている人もいるでしょう。

17
bolonn
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
    [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];

}

UIScrollViewDelegateを確認する必要があります

aScrollView.delegate = self;
13
user3693546

Yを常に一番上に設定するだけです。 UIScrollViewDelegateに準拠する必要がある

func scrollViewDidScroll(scrollView: UIScrollView) {
        scrollView.contentOffset.y = 0.0
}

これにより、スクロールの減速/加速効果が維持されます。

3
manuelsantos

IOS 11では、安全な領域ではなく画面の境界に密着するスクロールビューを作成することに関心がある場合は、次の項目を追加することを忘れないでください。

if (@available(iOS 11.0, *)) {
    [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
3
Michael