web-dev-qa-db-ja.com

UICollectionVIew:最初の最初のセルの行のスペースを削除するにはどうすればよいですか

Interface Builderにこの配置があり、すべてのプロパティがゼロに設定されています。

enter image description here

ただし、デバイスとシミュレータの両方で実行すると、次のように表示されます

enter image description here

セルの上のスペースはどこから来たのですか?

だから私はこのようなコードでUICollectionViewFlowLayoutのこれらのプロパティを設定しようとします

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.headerReferenceSize = CGSizeZero;
    layout.footerReferenceSize = CGSizeZero;
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
    layout.minimumInteritemSpacing = 0;
    layout.minimumLineSpacing = 0;
    layout.itemSize = CGSizeMake(103, 119);

    self.calendarView.collectionViewLayout = layout;

しかし、私は運がありません。

どうすればそのスペースを取り除くことができますか?ありがとう。

39
SaintTail

UICollectionViewはcontentInsetプロパティを持つUIScrollViewクラスの子孫であり、-20のトップインセットを設定すると問題が修正されます

[self.calendarView setContentInset:UIEdgeInsetsMake(-20, 0, 0, 0)];

ただしこの問題はUIViewControllerのautomaticallyAdjustsScrollViewInsetsプロパティに起因しています。ドキュメント別:

デフォルト値はYESです。これにより、ステータスバー、ナビゲーションバー、ツールバーまたはタブバーによって消費される画面領域に応じて、View Controllerがスクロールビューのインセットを調整できます。スクロールビューのインセット調整を自分で管理する場合は、NOに設定します。

そのため、ステータスバーの調整済みコンテンツインセットを取得します。結果の画像で一致しない値を手動で設定するよりも、自動調整を無効にする方が適切です。

[self setAutomaticallyAdjustsScrollViewInsets:NO];
105
Seryozha

別の方法は、ViewControllerを選択し、チェックボックスのチェックを外すスクロールビューインセットを調整するインターフェースビルダーで:

enter image description here

これは、基本的に次のコード行と同じです。しかし、インターフェイスビルダーで変更をすぐに確認する必要がありました。

automaticallyAdjustsScrollViewInsets = false
72
Yuchen Zhong

ここにSwiftにいくつかの調整を加えた場合の答えがあります:

ビューのごく一部を占めるコレクションビューがあります。私が使用した:

self.automaticallyAdjustsScrollViewInsets = false

レイアウトを台無しにしていた上部のスペースを削除します。このコードは、私にとってはうまくいきませんでした。

self.paperCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)

そして、これもしませんでした:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)

しかし、それは、UICollectionViewControllerを使用しておらず、単にUICollectionViewを使用しているためかもしれません。

より多くのコンテキストを提供するために、コードの大部分を次に示します。 enter image description here

13
Rob Norback

一緒に行くこともできます

[self.calendarView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
[self setAutomaticallyAdjustsScrollViewInsets:NO];

デフォルトでは、コレクションビューに追加されたコレクションビューヘッダーのスクロールスペースがあり、デバイスの問題を反映する可能性があるため、上から-20を追加する必要はありません。

8
Kirtikumar A.

スウィフト3:

self.automaticallyAdjustsScrollViewInsets = false
2
Urvish Modi

この答えは奇妙ですが、Interface Builderで作業しており、Navigation ControllerのルートView ControllerであるTab Bar Controllerの制御下にあるView ControllerにCollection Viewが埋め込まれている場合に機能します。

  • コレクションビューがあるView Controllerにツールバーを追加する
  • 階層内のツールバーを移動して、コレクションビューの上に配置します。

ツールバーがコレクションビューの上にある場合、プロトタイプのコレクションビューセルの上部からコレクションビューまでのスペースはありません。ツールバーがない場合、またはツールバーがコレクションビューの下にある場合、コレクションビューの上部とコレクションビューセルの間にスペースがあります。これは、ストーリーボードプレビューとアプリの実行中の両方に当てはまります。同じタイプのことは、テーブルビューでも発生します。

これは最近Xcodeバージョン8.3.3でテストされました Collection View Cells and Toolbar Dependency

1
Mark A. Durham

iOS 11ではautomaticallyAdjustsScrollViewInsetsの使用が廃止されたため、collectionView.contentInsetAdjustmentBehavior = .neverが推奨されます。

1
Bogdan Razvan

Interface Builderでこれを行うには、[スクロールビュー]セクションに移動し、[コンテンツインセット]ドロップダウンを[なし]に変更します。

UICollectionView ScrollView ContentInset Never

1
elliott.io