.net Maui Collectionview padding issue

567 Views Asked by At

I created a collectionview acting like a barchart diagram. For the bar display in the center of the screen, I am showing the current value for that center item. Everything works fine so far, but to be able to scroll the first or last item in the chart, to the center of the screen, i have to add padding to the beginning and end of the collection.

This chart is a migration of an old xamarin.forms app, where the padding was handle by a customerender and worked fine.

The issue i am currently seeing, is that when the collectionview´s ItemsLayout is

 ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Horizontal)

the handler that i made, doesn't set the padding.

But if the

    ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)

it works fine.

I tried different approach with handlers

            Microsoft.Maui.Controls.Handlers.Items.CollectionViewHandler.Mapper[nameof(IView)] = (h, v) =>
            {
               if (v is CollectionViewChart)
                {

#if ANDROID

                    (h.PlatformView as Android.Views.View).SetPadding(375,0,375,0);
                    var recycleView = h.PlatformView;
                    recycleView.SetClipToPadding(false);
                    recycleView.SetPadding(375, 0, 375, 0);

#endif
}

#if IOS
h.PlatformView.SemanticContentAttribute = UISemanticContentAttribute.ForceRightToLeft;

                ((UICollectionView)h.PlatformView.Subviews[0]).CollectionViewLayout.CollectionView.ContentInset = new UIEdgeInsets(0, 375, 0, (float)375);
                ((UICollectionView)h.PlatformView.Subviews[0]).CollectionViewLayout.CollectionView.ContentOffset = new CoreGraphics.CGPoint(0, 0);

#endif
};

or like handlers that looks more like the old customrenders that i have from the xamarin.forms project, like this.

public partial class CollectionViewChartHandler : CollectionViewHandler
{
protected override void ConnectHandler(RecyclerView platformView)
{

            platformView.RootView.SetPadding(375, 375, 375, 375);
    
    
            platformView.SetClipToPadding(false);
            platformView.SetPadding(375, 375, 375, 375);
            base.ConnectHandler(platformView);
        }
    }

and for iOS


    public partial class CollectionViewChartHandler : CollectionViewHandler 
    {
        protected override void ConnectHandler(UIView platformView)
        {
    
            base.ConnectHandler(platformView);
    
            platformView.SemanticContentAttribute = UISemanticContentAttribute.ForceRightToLeft;
            (((UICollectionView)platformView.Subviews[0]).CollectionViewLayout.CollectionView).ContentInset = new UIEdgeInsets(0, 375, 0, (float)375);
            ((UICollectionView)platformView.Subviews[0]).CollectionViewLayout.CollectionView.ContentOffset = new CoreGraphics.CGPoint(0, 0);
        }
    
      
    }

But none seems to work, when the itemslayout of the collectionView is set to Horizontal, but works fine if the itemslayout is set to Vertical

Any idea why?

0

There are 0 best solutions below