Xamarin.ios 集合视图布局问题

Xamarin.ios 集合视图布局问题,xamarin.ios,uicollectionview,Xamarin.ios,Uicollectionview,我使用的是CollectionViews,目前的问题是,每次我实现UICollectionViewFlowLayout时,我的原始布局都会被“销毁”。如果我没有实现FlowLayout,我的CollectionView只是一行,其中包含所有项目的长度,并且一切正常。但是CollectionView中的元素彼此之间的间隔非常远。要使用较小的间距,我需要实现FlowLayout,但在这样做时,我的CollectionView使用网格布局,其中的每个元素都缩小到20x20像素 我在哪里告诉FlowLa

我使用的是
CollectionViews
,目前的问题是,每次我实现
UICollectionViewFlowLayout
时,我的原始布局都会被“销毁”。如果我没有实现FlowLayout,我的
CollectionView
只是一行,其中包含所有项目的长度,并且一切正常。但是
CollectionView
中的元素彼此之间的间隔非常远。要使用较小的间距,我需要实现FlowLayout,但在这样做时,我的
CollectionView
使用网格布局,其中的每个元素都缩小到20x20像素

我在哪里告诉FlowLayout只使用一行,如何降低
集合视图中元素之间的间距?我看到了类似的东西

ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
    {
        ItemSpacing = 20
    }
但我不知道该把密码放在哪里。有人能帮我吗/

这就是我当前的流程布局:

    public class TestFlowLayout : UICollectionViewFlowLayout
{
    public TestFlowLayout()
    {
    }

    public override bool ShouldInvalidateLayoutForBoundsChange(CGRect newBounds)
    {
        return true;
    }

    public override UICollectionViewLayoutAttributes LayoutAttributesForItem(NSIndexPath indexPath)
    {
        return base.LayoutAttributesForItem(indexPath);
    }

    public override UICollectionViewLayoutAttributes[] LayoutAttributesForElementsInRect(CGRect rect)
    {
        return base.LayoutAttributesForElementsInRect(rect);
    }

    public override void PrepareLayout()
    {
        base.PrepareLayout();
    }

    public override void InvalidateLayout()
    {
        base.InvalidateLayout();
    }
}
我还在我的
ViewDidLoad
中尝试了类似的方法:

CollectionView.CollectionViewLayout = new TestFlowLayout
        {
            MinimumLineSpacing = 0,
            MinimumInteritemSpacing = 0,
            SectionInset = new UIEdgeInsets(0, 0, 0, 0),
            ScrollDirection = UICollectionViewScrollDirection.Horizontal
        };
但我还是得到了网格布局而不是线性布局

我还补充说

public override nint NumberOfSections(UICollectionView collectionView)
    {
        return 1;
    }

在我的UICollectionViewDataSource中。但是什么都不起作用。

原因:如果UICollectionView在一个方向上有多个单元格的空间,它将让该单元格填充它。例如,我们将UICollectionView的滑动方向设置为水平。此时,如果单元高度不足,可能会出现以下情况:

解决方案:

一般来说,要显示单行(单列),只需使单元格高度大于UICollectionView高度的1/2即可。那么一行不足以放下两个单元格,因此自然会出现单行排列:


因此,在您的情况下,只需设置UICollectionView

的框架,原因:如果UICollectionView在一个方向上有多个单元格的空间,它将让单元格填充它。例如,我们将UICollectionView的滑动方向设置为水平。此时,如果单元高度不足,可能会出现以下情况:

解决方案:

一般来说,要显示单行(单列),只需使单元格高度大于UICollectionView高度的1/2即可。那么一行不足以放下两个单元格,因此自然会出现单行排列:

因此,在您的情况下,您只需要设置UICollectionView

的框架,这就是解决方案。尼斯:)我添加了CollectionView.CollectionViewLayout=new TestFlowLayout{MinimumLineSpacing=-30,MinimumInItemSpacing=0,SectionInset=new UIEdgeInsets(0,0,0,0),ScrollDirection=UICollectionViewScrollDirection.Horizontal,ItemSize=new CGSize(125125)}; 它成功了。对于间距,我必须使最小行距为负数,这就是解决方案。尼斯:)我添加了CollectionView.CollectionViewLayout=new TestFlowLayout{MinimumLineSpacing=-30,MinimumInItemSpacing=0,SectionInset=new UIEdgeInsets(0,0,0,0),ScrollDirection=UICollectionViewScrollDirection.Horizontal,ItemSize=new CGSize(125125)}; 它成功了。对于间距,我必须使最小行距为负值。。