IBには、スクロールビューの垂直スクロールをオフにするオプションがありますが、機能していないようです。
IBではなく、垂直方向ではなく水平方向にのみスクロールするようにスクロールビューを設定するにはどうすればよいですか?
ContentSizeの高さをscrollViewの高さに設定してみてください。次に、垂直にスクロールするものがないため、垂直スクロールを無効にする必要があります。
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
iOS7以降:
最初:コンテンツサイズの幅は、スクロールビューの幅と等しくなければなりません
2番目: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を持たせることができます。
次の方法を含める
-(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;
Yを常に一番上に設定するだけです。 UIScrollViewDelegateに準拠する必要がある
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
これにより、スクロールの減速/加速効果が維持されます。
IOS 11では、安全な領域ではなく画面の境界に密着するスクロールビューを作成することに関心がある場合は、次の項目を追加することを忘れないでください。
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}