21

UICollectionView に項目が取り込まれると、次のように常に UICollectionView の端に移動します。

---------------
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
|X X X X X X X|
---------------

次のように、各エッジの周りにマージンを配置したいと思います。

---------------
| X X X X X X |
| X X X X X X |
| X X X X X X |
| X X X X X X |
| X X X X X X |
| X X X X X X |
---------------

フレームを設定して境界線をシミュレートすることにより、ホスティングUIView内にUICollectionViewを配置することでこれを達成しようとしましたが、フレーム内でスクロールするため、上部と下部が切り取られ、スクローラーもフレームの境界に表示されます。

私は API を見てきましたが、これを達成するための明らかなものは見当たりません。何か案は?

4

7 に答える 7

42

これは古い質問ですが、UICollectionView が UIScrollView を継承していることを忘れないでください。

UICollectionView *collectionView = [[UICollectionView alloc] init];
collectionView.contentInset = UIEdgeInsetsMake(x.x, x.x, x.x, x.x);
// Swift 3 for good measure
let collectionView = UICollectionView()
collectionView.contentInset = UIEdgeInsets(top: x.x, left: x.x, bottom: x.x, right: x.x)

contentInset と sectionInset の両方が、ビュー内のセルの間隔を変更する可能性があることに注意してください。詳細については、この投稿を参照してください。

于 2014-04-02T21:11:43.370 に答える
15

次の機能を利用できます。

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
  {
      return UIEdgeInsetsMake(50, 50,15,50);
  }

collectionviewCells を 1 行に強制する方法を理解するには、数値をいじる必要があります。

UIEdgeInsetsMake ( CGFloat top,CGFloat left,CGFloat bottom,CGFloat right); 

スイフト3の場合

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsetsMake(10, 4, 10, 4)
}
于 2013-06-05T08:31:14.017 に答える
3

スイフト2.0

self.automaticallyAdjustsScrollViewInsets = false
self.collectionView.contentInset = UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
于 2016-04-28T21:20:14.443 に答える