UICollectionView增加了最高利润


75

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


Answers:


195

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


3
效果很好。这件事无法在情节提要上解决,这很奇怪。
2013年

10
这是我见过的最愚蠢的事情!浪费了很多时间!
凯尔·雷德费恩

3
我花了很多时间:)非常感谢队友
WaaleedKhan 2014年

12
@bashan可以在情节提要板上完成,有一个名为“调整滚动视图
插图

11
请注意,如果您使用的是嵌入式Segue,并且集合视图控制器是嵌入式控制器,则需要将此方法调用给PARENT控制器,而不是在UICollectionViewController内部
csotiriou 2015年

87

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

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

在此处输入图片说明

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

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

3
谢谢你,老兄,这为我节省了大量的时间和进步,真的很省。
Darklex

17

我发现添加:

self.edgesForExtendedLayout = UIRectEdgeNone;

在视图控制器中,由于无法获得公认的答案,因此正在加载UICollectionView来解决该问题。

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

值得一读


5

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

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

修改填充的值。


5

斯威夫特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)
}

0

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

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

之前

相对于Superview的高度 不良集合视图布局

相对于安全区域的高度 好的收藏视图布局


0

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


0

Swift 5.2 / Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets 

自iOS 11起不推荐使用。

我的解决方案:

collectionView.contentInsetAdjustmentBehavior = .never

-3

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

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    yourCollectionView.contentOffset = CGPointMake(0, 0);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.