我想放置一个水平显示拇指的 UICollectionView 控件(只有一行拇指)。出于某种原因,UICollectionView 将拇指向下推了 44 个像素,因此“0”高度实际上是“44”。我认为它可能会添加这个空间来考虑导航栏的高度(我只是假设)。由于我的 UICollectionView 只在屏幕的一部分上,我不想要这个边距。有没有办法删除它?
9 回答
问题可能出在集合视图的内容插图中。尝试添加self.automaticallyAdjustsScrollViewInsets = NO;
到视图控制器的viewDidLoad
方法中。
您也可以在情节提要中进行设置。
确保您已选择 ViewController,然后取消选中“调整滚动视图插图”。
不过,我还没有测试过这个 IB/Storyboard 方法在 iOS6 上的作用。使用代码方法,您需要检查 VC 是否响应该方法:
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
我发现添加:
self.edgesForExtendedLayout = UIRectEdgeNone;
在视图控制器中,我正在加载 UICollectionView 解决了这个问题,因为我无法得到公认的答案。
我找到这个答案的问题可以在这里找到,并提供了一个非常深入和有趣的解释,解释了自动调整的滚动视图插图、扩展布局和扩展布局的边缘之间的区别。
非常值得一读
斯威夫特 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:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(PADDING_TOP, PADDING_LEFT, PADDING_BOTTOM, PADDING_RIGHT);
}
修改填充的值。
正如其他一些人提到的,自 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)
}
前
后
斯威夫特 5.2 / Xcode 11.3
viewController.automaticallyAdjustsScrollViewInsets
自 iOS 11 起已弃用。
我的解决方案:
collectionView.contentInsetAdjustmentBehavior = .never
尝试self.feedCollectionView.contentInsetAdjustmentBehavior = .never
在集合视图上使用。这实际上对我有用。
与@Sviatoslav 回答类似,您可以尝试以下操作:
- (void) viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
yourCollectionView.contentOffset = CGPointMake(0, 0);
}