UICollectionView增加了上边距

bas*_*han 75 uicollectionview ios7

我想放一个水平显示拇指的UICollectionView控件(只有一行拇指).由于某种原因,UICollectionView将拇指向下推44像素,因此"0"高度实际上是"44".我假设它可能会添加这个空间来考虑导航栏高度(我只是假设).由于我的UICollectionView仅在屏幕的一部分上,我不想要这个边距.有没有办法删除它?

Svi*_*miv 189

问题可能出在集合视图的内容插入中.尝试添加self.automaticallyAdjustsScrollViewInsets = NO;到视图控制器的viewDidLoad方法中.

  • @bashan它可以在storyboard上完成,有一个名为"Adjust Scroll View Insets"的复选框 (12认同)
  • 请注意,如果您使用的是嵌入式segue,并且集合视图控制器是嵌入式控制器,则需要将此方法调用到PARENT控制器,而不是在UICollectionViewController中. (11认同)
  • 这是我见过的最蠢的事情!浪费了这么多时间! (10认同)
  • 效果很好.这个故事在故事板上无法解决,这很奇怪. (3认同)
  • 我花了很多时间:)感谢很多朋友 (3认同)
  • 从iOS 11开始不推荐使用。 (2认同)

sib*_*urb 87

您也可以在故事板中设置它.

确保已选择ViewController,然后取消选中"Adjust Scroll View Insets".

在此输入图像描述

我还没有测试过这个IB/Storyboard方法在iOS6上做了什么.使用代码方法,您需要检查VC是否响应方法:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢老兄,这为我节省了一大堆时间和进步,真的得救了. (3认同)

sim*_*ley 17

我发现添加:

self.edgesForExtendedLayout = UIRectEdgeNone;
Run Code Online (Sandbox Code Playgroud)

在视图控制器中,我正在加载UICollectionView解决了问题,因为我无法获得接受的工作答案.

我发现这个答案的问题,可以发现这里并提供了一个非常深入和自动调整滚动视图插图,扩展布局和边缘延长布局之间的差异有趣的解释.

非常值得一读


Jor*_*tel 5

也许您可以尝试使用集合视图的Delegate流布局将此值强制为0:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(PADDING_TOP, PADDING_LEFT, PADDING_BOTTOM, PADDING_RIGHT);
}
Run Code Online (Sandbox Code Playgroud)

修改填充的值.


Jos*_*nor 5

斯威夫特3:

首先,您要将viewControllers设置automaticallyAdjustsScrollViewInsets为false:

self.automaticallyAdjustsScrollViewInsets = false
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够相应地调整边缘插图:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    //top, left, bottom, right
    return UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
}
Run Code Online (Sandbox Code Playgroud)