75

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

4

9 回答 9

195

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

于 2013-10-16T19:08:36.187 回答
87

您也可以在情节提要中进行设置。

确保您已选择 ViewController,然后取消选中“调整滚动视图插图”。

在此处输入图像描述

不过,我还没有测试过这个 IB/Storyboard 方法在 iOS6 上的作用。使用代码方法,您需要检查 VC 是否响应该方法:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
于 2014-01-14T11:54:55.910 回答
17

我发现添加:

self.edgesForExtendedLayout = UIRectEdgeNone;

在视图控制器中,我正在加载 UICollectionView 解决了这个问题,因为我无法得到公认的答案。

我找到这个答案的问题可以在这里找到,并提供了一个非常深入和有趣的解释,解释了自动调整的滚动视图插图、扩展布局和扩展布局的边缘之间的区别。

非常值得一读

于 2014-06-18T00:43:09.943 回答
6

斯威夫特 3:

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

self.automaticallyAdjustsScrollViewInsets = false

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

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)
}
于 2017-01-22T06:53:58.470 回答
5

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

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

修改填充的值。

于 2013-10-16T18:57:17.670 回答
1

正如其他一些人提到的,自 iOS 11 以来viewController.automaticallyAdjustsScrollViewInsets已被弃用。我的解决方案...

斯威夫特 4.2、Xcode 10.1、iOS 12.1:

出于某种原因,collectionView.contentSize.height它看起来比我的收藏视图的解析高度要小。首先,我使用了相对于父视图高度的 1/2 的自动布局约束。为了解决这个问题,我将约束更改为相对于视图的“安全区域”。

这使我可以使用以下方法设置单元格高度以垂直填充我的集合视图collectionView.contentSize.height

private func setCellSize() {
    let height: CGFloat = (collectionView.contentSize.height) / CGFloat(numberOfRows)
    let width: CGFloat = view.frame.width - CGFloat(horizontalCellMargin * 2)

    let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    layout.itemSize = CGSize(width: width, height: height)
}

相对于超级视图的高度 错误的集合视图布局

相对于安全区域的高度 好的集合视图布局

于 2019-05-06T19:22:53.557 回答
1

斯威夫特 5.2 / Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets 

自 iOS 11 起已弃用。

我的解决方案:

collectionView.contentInsetAdjustmentBehavior = .never
于 2020-05-12T21:52:44.917 回答
0

尝试self.feedCollectionView.contentInsetAdjustmentBehavior = .never在集合视图上使用。这实际上对我有用。

于 2020-03-15T03:32:26.913 回答
-3

与@Sviatoslav 回答类似,您可以尝试以下操作:

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    yourCollectionView.contentOffset = CGPointMake(0, 0);
}
于 2015-07-02T00:30:05.613 回答