web-dev-qa-db-ja.com

UIScrollViewが上部にスペースを残し、下部にスクロールしないのはなぜですか

Objective-Cプログラミングは初めてです。

UIScrollViewをいくつかのラベル、画像、テキストビューと共に使用しています。

Autolayoutをオフにし、「View Insetsをスクロールする」をオン(タイトルで説明されている状況)とオフ(スクロールしない)で試しました。

これは私がviewDidLoadに挿入するものです:

    [scroller setScrollEnabled:YES];
[scroller setContentSize:CGSizeMake(320, 687)];

しかし、私は非常に単純なものを見逃しているに違いありません。

26
user3686588

1 ... UIScrollViewが上部にスペースを残す理由

ストーリーボードあり-Goto View Controller> Attribute Inspector> Adjust Scroll View Insetsプロパティのチェックを外します

コードあり-余分なスペースの場合、viewControllerプロパティautomaticallyAdjustsScrollViewInsetsNOに設定します。デフォルトではYESです。

_self.automaticallyAdjustsScrollViewInsets = false; 
scroller.contentInset = UIEdgeInsetsZero;
scroller.scrollIndicatorInsets = UIEdgeInsetsZero;
scroller.contentOffset = CGPointMake(0.0, 0.0);
_

2 ...下部までスクロールしません

スクロールするには、CGSizeMake(320, 1687)のようにcontentSizeに大きな数字を試してください。動作する場合は、contentSizeをすべてのコンテンツを保持するのに十分な大きさに設定していないことを意味します。

45
Yogendra

View Controllerを選択し、表示されたオプションをfalseに設定するだけです(チェック解除)

ViewController Inspector

31
invoodoo

iOS 11

if #available(iOS 11.0, *) {
    scrollView.contentInsetAdjustmentBehavior = .never
} else {
    automaticallyAdjustsScrollViewInsets = false
}
19
casillas

iOS 11

私の場合、IBのこのUIScrollView Content InsetsプロパティをAutomaticからNeverに変更するだけで役に立ちました。

16
mike.stalker

Swift 3.

self.automaticallyAdjustsScrollViewInsets = false

scrollView.contentInset = UIEdgeInsets.zero

scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;     
6
Kam K

実際、マージンはScrollViewInsetsまたはcontentOffsetとは関係ありません。 UIScrollViewを上下左右に固定すると、SuperView.TopSafeArea.Topの固定が競合するだけです。

これは、上部マージンをカバーする正しい方法です。

1)4つの側面すべてを固定します。

Pinning

2)上部の制約を選択> 2番目のアイテムをSuperview.Topに変更

conflict

3)次に、最後のステップは、定数を0(ゼロ)に変更することです。 enter image description here

これも確認してください: https://github.com/29satnam/MoveTextFieldWhenKeyboardAppearsSwift

2
Satnam Sync

IPhoneXでは、これは、自動レイアウトが考慮しようとするいくつかの無意味な安全領域の問題により発生します。これで修正(iPhoneXの場合):

if (@available(iOS 11.0, *)) {
    scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
1
Albert Renshaw

Swift 3(自動レイアウト)

  1. 「レイアウトマージン」を明示的に変更します
  2. 必要に応じてマージンを設定します

enter image description here

0
Matt Butler

これは私のために働く、

_scrollView.scrollIndicatorInsets = UIEdgeInsetsZero;
_scrollView.contentOffset = CGPointMake(0.0, 0.0);
[_scrollView setContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
0

Swift 3.

self.automaticallyAdjustsScrollViewInsets = false

scrollView.contentInset = UIEdgeInsets.zero

scrollView.scrollIndicatorInsets = UIEdgeInsets.zero;    

scrollView.contentOffset = CGPoint(x: 0.0, y: 0.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)];
    }
}
0
Mr. Sun Lin