我在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;
但我没有运气。
我怎么能摆脱这个空间?谢谢。
UICollectionView是UIScrollView类的后代,它具有contentInset
属性,设置-20 top inset修复了问题
[self.calendarView setContentInset:UIEdgeInsetsMake(-20, 0, 0, 0)];
但是,问题来自UIViewController的automaticallyAdjustsScrollViewInsets
属性。通过文件:
默认值为YES,允许视图控制器调整其滚动视图插入以响应状态栏,导航栏和工具栏或标签栏所消耗的屏幕区域。如果要自己管理滚动视图插入调整,请设置为NO。
这就是我们为状态栏调整内容插入的原因。最好禁用自动调整,而不是手动设置值,结果图片中不匹配。
[self setAutomaticallyAdjustsScrollViewInsets:NO];
以下是一些快速回答:
我有一个集合视图占据了视图的一小部分。我用了:
self.automaticallyAdjustsScrollViewInsets = false
删除弄乱我的布局的顶部间距。这段代码对我不起作用:
self.paperCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
这个也没有:
self.paperCollectionView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)
但那可能是因为我没有使用UICollectionViewController,我只是使用UICollectionView。
你也可以去
[self.calendarView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
[self setAutomaticallyAdjustsScrollViewInsets:NO];
在集合视图上添加了默认的集合视图标题滚动空间,您无需从顶部添加-20,因为它可能反映在设备问题上
斯威夫特3:
self.automaticallyAdjustsScrollViewInsets = false
iOS 11不推荐使用automaticallyAdjustsScrollViewInsets
,因此建议使用collectionView.contentInsetAdjustmentBehavior = .never
。