diff --git a/src/Controls/src/Core/Handlers/Items/iOS/CarouselViewLayout.cs b/src/Controls/src/Core/Handlers/Items/iOS/CarouselViewLayout.cs index 505427070469..c1001a3eb058 100644 --- a/src/Controls/src/Core/Handlers/Items/iOS/CarouselViewLayout.cs +++ b/src/Controls/src/Core/Handlers/Items/iOS/CarouselViewLayout.cs @@ -19,9 +19,9 @@ public CarouselViewLayout(ItemsLayout itemsLayout, CarouselView carouselView) : public override void ConstrainTo(CGSize size) { - //TODO: Should we scale the items - var width = size.Width - _carouselView.PeekAreaInsets.Left - _carouselView.PeekAreaInsets.Right; - var height = size.Height - _carouselView.PeekAreaInsets.Top - _carouselView.PeekAreaInsets.Bottom; + // TODO: Should we scale the items + var width = size.Width != 0 ? size.Width - _carouselView.PeekAreaInsets.Left - _carouselView.PeekAreaInsets.Right : 0; + var height = size.Height != 0 ? size.Height - _carouselView.PeekAreaInsets.Top - _carouselView.PeekAreaInsets.Bottom : 0; if (ScrollDirection == UICollectionViewScrollDirection.Horizontal) { diff --git a/src/Controls/tests/DeviceTests/Elements/CarouselView/CarouselViewTests.cs b/src/Controls/tests/DeviceTests/Elements/CarouselView/CarouselViewTests.cs index 09b46378e139..efb175da3265 100644 --- a/src/Controls/tests/DeviceTests/Elements/CarouselView/CarouselViewTests.cs +++ b/src/Controls/tests/DeviceTests/Elements/CarouselView/CarouselViewTests.cs @@ -73,6 +73,45 @@ await CreateHandlerAndAddToWindow(layout, async (handler) => Assert.NotNull(handler.PlatformView); }); } + + [Fact] + public async Task HiddenCarouselViewNoCrash() + { + SetupBuilder(); + + ObservableCollection data = new ObservableCollection() + { + 1, + 2, + }; + + var template = new DataTemplate(() => + { + return new Grid() + { + new Label() + }; + }); + + var carouselView = new CarouselView() + { + ItemTemplate = template, + ItemsSource = data + }; + + var layout = new Grid() + { + carouselView, + }; + + layout.IsVisible = false; + + await CreateHandlerAndAddToWindow(layout, async (handler) => + { + await Task.Delay(100); + Assert.NotNull(handler.PlatformView); + }); + } } internal class CustomDataTemplateSelectorSelector : DataTemplateSelector