/// <summary>
        /// Initializes a new instance of the LinearLayoutManager class.
        /// </summary>
        /// <param name="isHorizontal">Layout orientation</param>
        /// <param name="sizingStrategy">Item size measuring strategy</param>
        /// <param name="itemSpacing">A space size between items</param>
#pragma warning disable CS8618
        public LinearLayoutManager(bool isHorizontal, ItemSizingStrategy sizingStrategy, int itemSpacing)
#pragma warning restore CS8618
        {
            IsHorizontal   = isHorizontal;
            _hasUnevenRows = sizingStrategy == ItemSizingStrategy.MeasureAllItems;
            ItemSpacing    = itemSpacing;
        }
예제 #2
0
        public static T ItemSizingStrategy <T>(this T structuredElement, ItemSizingStrategy itemSizingStrategy)
            where T : StructuredItemsView
        {
            structuredElement.ItemSizingStrategy = itemSizingStrategy;

            return(structuredElement);
        }
예제 #3
0
 public GridLayoutManager(bool isHorizontal, int span, ItemSizingStrategy sizingStrategy, int verticalSpacing, int horizontalSpacing)
 {
     IsHorizontal          = isHorizontal;
     Span                  = span;
     _hasUnevenRows        = sizingStrategy == ItemSizingStrategy.MeasureAllItems;
     VerticalItemSpacing   = verticalSpacing;
     HorizontalItemSpacing = horizontalSpacing;
 }
예제 #4
0
 public static TItemSizingStrategy ToPlatform(this ItemSizingStrategy itemSizingStrategy)
 {
     if (itemSizingStrategy == ItemSizingStrategy.MeasureAllItems)
     {
         return(TItemSizingStrategy.MeasureAllItems);
     }
     return(TItemSizingStrategy.MeasureFirstItem);
 }
        static void UpdateExplanation(Label explanation, ItemSizingStrategy strategy)
        {
            switch (strategy)
            {
            case ItemSizingStrategy.MeasureAllItems:
                explanation.Text = "Each item is individually measured.";
                break;

            case ItemSizingStrategy.MeasureFirstItem:
                explanation.Text = "The first item is measured, and that size is given to all subsequent cells.";
                break;
            }
        }
        protected ItemsViewLayout(ItemsLayout itemsLayout, ItemSizingStrategy itemSizingStrategy)
        {
            ItemSizingStrategy = itemSizingStrategy;

            _itemsLayout = itemsLayout;
            _itemsLayout.PropertyChanged += LayoutOnPropertyChanged;

            var scrollDirection = itemsLayout.Orientation == ItemsLayoutOrientation.Horizontal
                                ? UICollectionViewScrollDirection.Horizontal
                                : UICollectionViewScrollDirection.Vertical;

            Initialize(scrollDirection);

            if (Forms.IsiOS11OrNewer)
            {
                // `ContentInset` is actually the default value, but I'm leaving this here as a note to
                // future maintainers; it's likely that someone will want a Platform Specific to change this behavior
                // (Setting it to `SafeArea` lets you do the thing where the header/footer of your UICollectionView
                // fills the screen width in landscape while your items are automatically shifted to avoid the notch)
                SectionInsetReference = UICollectionViewFlowLayoutSectionInsetReference.ContentInset;
            }
        }
 /// <summary>
 /// Initializes a new instance of the LinearLayoutManager class.
 /// </summary>
 /// <param name="isHorizontal">Layout orientation</param>
 /// <param name="sizingStrategy">Item size measuring strategy</param>
 public LinearLayoutManager(bool isHorizontal, ItemSizingStrategy sizingStrategy) : this(isHorizontal, sizingStrategy, 0)
 {
 }
예제 #8
0
        protected virtual ItemsViewLayout SelectLayout(IItemsLayout layoutSpecification, ItemSizingStrategy itemSizingStrategy)
        {
            if (layoutSpecification is GridItemsLayout gridItemsLayout)
            {
                return(new GridViewLayout(gridItemsLayout, itemSizingStrategy));
            }

            if (layoutSpecification is ListItemsLayout listItemsLayout)
            {
                return(new ListViewLayout(listItemsLayout, itemSizingStrategy));
            }

            // Fall back to vertical list
            return(new ListViewLayout(new ListItemsLayout(ItemsLayoutOrientation.Vertical), itemSizingStrategy));
        }
예제 #9
0
        public static ICollectionViewLayoutManager ToLayoutManager(this IItemsLayout layout, ItemSizingStrategy sizing = ItemSizingStrategy.MeasureFirstItem)
        {
            switch (layout)
            {
            case LinearItemsLayout listItemsLayout:
                return(new LinearLayoutManager(listItemsLayout.Orientation == ItemsLayoutOrientation.Horizontal, sizing, Forms.ConvertToScaledPixel(listItemsLayout.ItemSpacing)));

            case GridItemsLayout gridItemsLayout:
                return(new GridLayoutManager(gridItemsLayout.Orientation == ItemsLayoutOrientation.Horizontal,
                                             gridItemsLayout.Span,
                                             sizing,
                                             Forms.ConvertToScaledPixel(gridItemsLayout.VerticalItemSpacing),
                                             Forms.ConvertToScaledPixel(gridItemsLayout.HorizontalItemSpacing)));

            default:
                break;
            }

            return(new LinearLayoutManager(false));
        }
예제 #10
0
 public GridLayoutManager(bool isHorizontal, int span, ItemSizingStrategy sizingStrategy) : this(isHorizontal, span, sizingStrategy, 0, 0)
 {
 }
예제 #11
0
 public GridLayoutManager(bool isHorizontal, int span, ItemSizingStrategy sizingStrategy)
 {
     IsHorizontal   = isHorizontal;
     Span           = span;
     _hasUnevenRows = sizingStrategy == ItemSizingStrategy.MeasureAllItems;
 }
예제 #12
0
        protected override ItemsViewLayout SelectLayout(IItemsLayout layoutSpecification, ItemSizingStrategy itemSizingStrategy)
        {
            if (layoutSpecification is ListItemsLayout listItemsLayout)
            {
                return(new CarouselViewLayout(listItemsLayout, itemSizingStrategy, CarouselView));
            }

            // Fall back to horizontal carousel
            return(new CarouselViewLayout(new ListItemsLayout(ItemsLayoutOrientation.Horizontal), itemSizingStrategy, CarouselView));
        }
예제 #13
0
 public static T ItemSizingStrategy <T>(this T structureditemsview, ItemSizingStrategy itemSizingStrategy) where T : IRxStructuredItemsView
 {
     structureditemsview.ItemSizingStrategy = itemSizingStrategy;
     return(structureditemsview);
 }
 public GridViewLayout(GridItemsLayout itemsLayout, ItemSizingStrategy itemSizingStrategy) : base(itemsLayout, itemSizingStrategy)
 {
     _itemsLayout = itemsLayout;
 }
예제 #15
0
 public CarouselViewLayout(ItemsLayout itemsLayout, ItemSizingStrategy itemSizingStrategy, CarouselView carouselView) : base(itemsLayout, itemSizingStrategy)
 {
     _carouselView = carouselView;
     _itemsLayout  = itemsLayout;
 }
예제 #16
0
 public static StructuredItemsView ItemSizingStrategy(this StructuredItemsView items, ItemSizingStrategy strategy)
 {
     items.ItemSizingStrategy = strategy;
     return(items);
 }
예제 #17
0
 public ListViewLayout(LinearItemsLayout itemsLayout, ItemSizingStrategy itemSizingStrategy) : base(itemsLayout, itemSizingStrategy)
 {
 }
예제 #18
0
 public LinearLayoutManager(bool isHorizontal, ItemSizingStrategy sizingStrategy)
 {
     IsHorizontal   = isHorizontal;
     _hasUnevenRows = sizingStrategy == ItemSizingStrategy.MeasureAllItems;
 }