UICollectionVIew:如何删除顶部第一个单元格行上的空格

问题描述 投票:36回答:8

我在Interface Builder中有这种安排,所有属性都设置为零。

但是,当我在设备和模拟器上运行它时,它看起来像这样

细胞上方的空间来自哪里?

所以我尝试在这样的代码中为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;

但我没有运气。

我怎么能摆脱这个空间?谢谢。

ios uicollectionview uicollectionviewlayout
8个回答
103
投票

UICollectionView是UIScrollView类的后代,它具有contentInset属性,设置-20 top inset修复了问题

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

但是,问题来自UIViewController的automaticallyAdjustsScrollViewInsets属性。通过文件:

默认值为YES,允许视图控制器调整其滚动视图插入以响应状态栏,导航栏和工具栏或标签栏所消耗的屏幕区域。如果要自己管理滚动视图插入调整,请设置为NO。

这就是我们为状态栏调整内容插入的原因。最好禁用自动调整,而不是手动设置值,结果图片中不匹配。

[self setAutomaticallyAdjustsScrollViewInsets:NO];

72
投票

另一种方法是选择ViewController并取消选中界面构建器中的Adjust Scroll View Insets复选框:

enter image description here

它与以下代码行基本相同。但是你必须立即在界面构建器中看到你的更改。

automaticallyAdjustsScrollViewInsets = false

13
投票

以下是一些快速回答:

我有一个集合视图占据了视图的一小部分。我用了:

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


7
投票

你也可以去

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

在集合视图上添加了默认的集合视图标题滚动空间,您无需从顶部添加-20,因为它可能反映在设备问题上


2
投票

斯威夫特3:

self.automaticallyAdjustsScrollViewInsets = false

1
投票

这个答案很奇怪,但是如果您在Interface Builder中工作并且在视图控制器中嵌入了一个集合视图,该集合视图位于作为导航控制器的根视图控制器的标签栏控制器的控制之下。

  • 将工具栏添加到具有集合视图的视图控制器
  • 移动层次结构中的工具栏,使其位于“集合视图”上方

如果工具栏位于集合视图上方,则原型集合视图单元格顶部到集合视图将没有空间。如果没有工具栏或工具栏位于集合视图下方,则集合视图顶部和集合视图单元格之间将存在空间。在故事板预览和运行应用程序时都是如此。表视图出现相同类型的事情。

这是最近使用Xcode版本8.3.3 Collection View Cells and Toolbar Dependency测试的


1
投票

您可以在Interface Builder中执行此操作,方法是转到Scroll View部分并将Content insets下拉列表更改为“Never”。

UICollectionView ScrollView ContentInset Never


1
投票

iOS 11不推荐使用automaticallyAdjustsScrollViewInsets,因此建议使用collectionView.contentInsetAdjustmentBehavior = .never

© www.soinside.com 2019 - 2024. All rights reserved.