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