UICollectionView 添加顶部边距

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

46020 次浏览

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

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

修改填充值。

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

你也可以在故事板中设置这个。

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

enter image description here

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

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}

我发现:

self.edgesForExtendedLayout = UIRectEdgeNone;

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

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

值得一读

类似于@Sviatoslav 的回答,你可以试试下面的方法:

- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];


yourCollectionView.contentOffset = CGPointMake(0, 0);
}

斯威夫特3:

首先,您需要将 viewController 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)
}

正如其他人提到的,viewController.automaticallyAdjustsScrollViewInsets已经是 从 iOS11开始就不再使用了。我的解决方案..。

Swift 4.2,Xcode 10.1,iOS 12.1:

由于某种原因,collectionView.contentSize.height看起来比我的集合视图的解析高度要小。首先,我使用了一个相对于 Superview 高度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)
}

之前

height relative to superview bad collection view layout

之后

height relative to safe area good collection view layout

尝试在集合视图中使用 self.feedCollectionView.contentInsetAdjustmentBehavior = .never

Swift 5.2/Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets

自从 iOS11以来就已经被废弃了。

我的解决办法是:

collectionView.contentInsetAdjustmentBehavior = .never