Objective-Cプログラミングは初めてです。
UIScrollViewをいくつかのラベル、画像、テキストビューと共に使用しています。
Autolayoutをオフにし、「View Insetsをスクロールする」をオン(タイトルで説明されている状況)とオフ(スクロールしない)で試しました。
これは私がviewDidLoadに挿入するものです:
[scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 687)];
しかし、私は非常に単純なものを見逃しているに違いありません。
1 ... UIScrollViewが上部にスペースを残す理由
ストーリーボードあり-Goto View Controller> Attribute Inspector> Adjust Scroll View Insetsプロパティのチェックを外します
コードあり-余分なスペースの場合、viewController
プロパティautomaticallyAdjustsScrollViewInsets
をNO
に設定します。デフォルトではYES
です。
_self.automaticallyAdjustsScrollViewInsets = false;
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);
_
2 ...下部までスクロールしません
スクロールするには、CGSizeMake(320, 1687)
のようにcontentSize
に大きな数字を試してください。動作する場合は、contentSize
をすべてのコンテンツを保持するのに十分な大きさに設定していないことを意味します。
View Controllerを選択し、表示されたオプションをfalseに設定するだけです(チェック解除)
iOS 11
if #available(iOS 11.0, *) {
scrollView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
iOS 11
私の場合、IBのこのUIScrollView Content InsetsプロパティをAutomatic
からNever
に変更するだけで役に立ちました。
Swift 3.
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
実際、マージンはScrollViewInsets
またはcontentOffset
とは関係ありません。 UIScrollViewを上下左右に固定すると、SuperView.Top
とSafeArea.Top
の固定が競合するだけです。
これは、上部マージンをカバーする正しい方法です。
1)4つの側面すべてを固定します。
2)上部の制約を選択> 2番目のアイテムをSuperview.Top
に変更
3)次に、最後のステップは、定数を0(ゼロ)に変更することです。
これも確認してください: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift
IPhoneXでは、これは、自動レイアウトが考慮しようとするいくつかの無意味な安全領域の問題により発生します。これで修正(iPhoneXの場合):
if (@available(iOS 11.0, *)) {
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
これは私のために働く、
_scrollView.scrollIndicatorInsets = UIEdgeInsetsZero;
_scrollView.contentOffset = CGPointMake(0.0, 0.0);
[_scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
Swift 3.
self.automaticallyAdjustsScrollViewInsets = false
scrollView.contentInset = UIEdgeInsets.zero
scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;
scrollView.contentOffset = CGPoint(x: 0.0, y: 0.0);
ビュー.mファイルで、このコードを使用してこの問題を修正します
-(void)layoutSubviews{
// To fix iOS8 bug of scrollView autolayout
if([[[[[UIDevice currentDevice]systemVersion] componentsSeparatedByString:@"."]objectAtIndex:0] integerValue] == 8){
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
}