我在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是具有contentInset
属性的UIScrollView类的后代,设置-20 top inset可解决此问题
[self.calendarView setContentInset:UIEdgeInsetsMake(-20, 0, 0, 0)];
但是,问题来自UIViewController的automaticallyAdjustsScrollViewInsets
属性。通过文档:
默认值为YES,它允许视图控制器根据状态栏,导航栏以及工具栏或选项卡栏占用的屏幕区域来调整其滚动视图插图。如果要自己管理滚动视图插图调整,请设置为NO。
这就是为什么我们获得状态栏调整后的内容插图的原因。最好禁用自动调整,而不要手动设置与结果图片不匹配的值。
[self setAutomaticallyAdjustsScrollViewInsets:NO];
另一种方法是选择ViewController并取消选中界面生成器中的Adjust Scroll View Insets复选框:
它与下面的代码行基本相同。但是您必须立即在界面生成器中看到所做的更改。
automaticallyAdjustsScrollViewInsets = false
以下是一些调整后的迅速答案:
我有一个集合视图,只占视图的一小部分。我用了:
self.automaticallyAdjustsScrollViewInsets = false
删除使我的布局混乱的顶部间距。这段代码对我不起作用:
self.paperCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
而且这个也没有:
self.paperCollectionView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)
但这可能是因为我没有使用UICollectionViewController,而是使用了UICollectionView。
iOS 11不建议使用automaticallyAdjustsScrollViewInsets
,因此collectionView.contentInsetAdjustmentBehavior = .never
建议使用。
你也可以去
[self.calendarView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
[self setAutomaticallyAdjustsScrollViewInsets:NO];
默认情况下,集合视图上会添加集合视图标题滚动空间,您无需从顶部添加-20,因为它可能会反映设备问题
您可以在Interface Builder中执行此操作,方法是转到“滚动视图”部分,然后将“内容插入”下拉列表更改为“从不”。
斯威夫特3:
self.automaticallyAdjustsScrollViewInsets = false
文章标签:ios , uicollectionview , uicollectionviewlayout
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!
评论已关闭!