IBには、スクロールビューの垂直スクロールのチェックを外すオプションがありますが、機能していないようです。
コード内でIBではなく水平方向にのみスクロールし、垂直方向にはスクロールしないようにスクロールビューを設定するにはどうすればよいですか?
回答:
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をスクロールするときに呼び出されるメソッドであり、そうすることで、コンテンツが常に同じになるように強制します。
float oldY;
上記のコードを参照するように、.mファイルでoldY変数を宣言しないでください。これは、アプリケーションごとのCスタイルの変数シンボルであり、変数はコントローラークラスのインスタンスメンバーとして宣言する必要があります。
必要な方向を無効にするには、コンテンツサイズに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;
iOS 11では、安全な領域ではなく画面の境界に固執するスクロールビューを作成することに関心がある場合は、以下を追加することを忘れないでください。
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
多くの答えには、contentOffset
0に設定することが含まれます。scrollView内のビューを中央に配置したい場合がありました。これは私のために仕事をしました:
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.y = -scrollView.contentInset.top
}