UICollectionView增加了上边距

时间:2013-10-16 18:52:36

标签: ios7 uicollectionview

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

9 个答案:

答案 0 :(得分:187)

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

答案 1 :(得分:87)

您也可以在故事板中进行设置。

确保您已选择ViewController,然后取消选中“Adjust Scroll View Insets”。

enter image description here

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

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

答案 2 :(得分:16)

我发现添加:

self.edgesForExtendedLayout = UIRectEdgeNone;

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

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

非常值得一读

答案 3 :(得分:5)

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

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

修改填充的值。

答案 4 :(得分:4)

斯威夫特3:

首先,您要将viewControllers self.automaticallyAdjustsScrollViewInsets = false 设置为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)
}

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

{{1}}

答案 5 :(得分:0)

就像其他人提到的那样,viewController.automaticallyAdjustsScrollViewInsets已经是deprecated since iOS 11。我的解决方案...

Swift 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)
}

之前

height relative to superview bad collection view layout

之后

height relative to safe area good collection view layout

答案 6 :(得分:0)

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

答案 7 :(得分:0)

Swift 5.2 / Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets 
从iOS 11开始不推荐使用

我的解决方案:

collectionView.contentInsetAdjustmentBehavior = .never

答案 8 :(得分:-3)

与@Sviatoslav答案类似,您可以尝试以下方法:

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

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