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

时间:2014-05-21 14:29:00

标签: ios uicollectionview uicollectionviewlayout

我在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;

但我没有运气。

我怎样摆脱那个空间? 感谢。

8 个答案:

答案 0 :(得分:102)

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

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

然而,问题来自UIViewController的automaticallyAdjustsScrollViewInsets属性。 通过文档:

  

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

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

[self setAutomaticallyAdjustsScrollViewInsets:NO];

答案 1 :(得分:70)

另一种方法是选择 ViewController ,并取消选中界面构建器中的调整滚动视图插入复选框:

enter image description here

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

automaticallyAdjustsScrollViewInsets = false

答案 2 :(得分:12)

以下是一些快速回答:

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

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

答案 3 :(得分:7)

您也可以使用

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

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

答案 4 :(得分:2)

斯威夫特3:

self.automaticallyAdjustsScrollViewInsets = false

答案 5 :(得分:1)

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

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

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

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

答案 6 :(得分:1)

您可以在Interface Builder中执行此操作,方法是转到“滚动视图”部分,然后将“内容插入”下拉列表更改为“从不”。

UICollectionView ScrollView ContentInset Never

答案 7 :(得分:1)

iOS 11已弃用automaticallyAdjustsScrollViewInsets,因此建议使用collectionView.contentInsetAdjustmentBehavior = .never