我在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;
但我没有运气。
我怎样摆脱那个空间? 感谢。
答案 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 ,并取消选中界面构建器中的调整滚动视图插入复选框:
它与以下代码行基本相同。但是你必须立即在界面构建器中看到你的更改。
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。
答案 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>
如果工具栏位于集合视图上方,则原型集合视图单元格顶部到集合视图将没有空间。如果没有工具栏或工具栏位于集合视图下方,则集合视图顶部和集合视图单元格之间将存在空间。在故事板预览和运行应用程序时都是如此。表视图会出现相同类型的事情。
答案 6 :(得分:1)
答案 7 :(得分:1)
iOS 11已弃用automaticallyAdjustsScrollViewInsets
,因此建议使用collectionView.contentInsetAdjustmentBehavior = .never
。