From 6b77f9f71a00996243f33616a6d99c8af950a0c9 Mon Sep 17 00:00:00 2001 From: nielsvanderknaap Date: Fri, 19 Jan 2024 11:21:02 +0100 Subject: [PATCH 1/7] fixes carouselview layout on iOS --- .../src/Core/Handlers/Items/CarouselViewHandler.iOS.cs | 6 ++++++ .../src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt | 1 + 2 files changed, 7 insertions(+) diff --git a/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs b/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs index 2bc378679bc3..814a85d509b2 100644 --- a/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs +++ b/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs @@ -1,5 +1,6 @@ #nullable disable using System; +using Microsoft.Maui.Graphics; namespace Microsoft.Maui.Controls.Handlers.Items { @@ -64,5 +65,10 @@ public static void MapLoop(CarouselViewHandler handler, CarouselView carouselVie { (handler.Controller as CarouselViewController)?.UpdateLoop(); } + + public override Size GetDesiredSize(double widthConstraint, double heightConstraint) + { + return this.GetDesiredSizeFromHandler(widthConstraint, heightConstraint); + } } } \ No newline at end of file diff --git a/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt index a489446f682e..f6e67f3c4002 100644 --- a/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt +++ b/src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt @@ -179,6 +179,7 @@ Microsoft.Maui.Controls.IValueConverter.ConvertBack(object? value, System.Type! *REMOVED*override Microsoft.Maui.Controls.Handlers.Compatibility.PhoneFlyoutPageRenderer.WillRotate(UIKit.UIInterfaceOrientation toInterfaceOrientation, double duration) -> void ~virtual Microsoft.Maui.Controls.Handlers.Items.ItemsViewController.DetermineCellReuseId(Foundation.NSIndexPath indexPath) -> string override Microsoft.Maui.Controls.Handlers.Items.ItemsViewHandler.GetDesiredSize(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size +override Microsoft.Maui.Controls.Handlers.Items.CarouselViewHandler.GetDesiredSize(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size ~Microsoft.Maui.Controls.Element.AddLogicalChild(Microsoft.Maui.Controls.Element element) -> void ~Microsoft.Maui.Controls.Element.InsertLogicalChild(int index, Microsoft.Maui.Controls.Element element) -> void ~Microsoft.Maui.Controls.Element.RemoveLogicalChild(Microsoft.Maui.Controls.Element element) -> bool From 2437a36b48178698863914d366e383a7c8fc61fb Mon Sep 17 00:00:00 2001 From: nielsvanderknaap Date: Fri, 19 Jan 2024 12:08:39 +0100 Subject: [PATCH 2/7] Adds 'GetDesiredSize' also to the maccatalyst public API --- .../src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt b/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt index 8a57f5667bfb..ba4790c4ecae 100644 --- a/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt +++ b/src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt @@ -175,6 +175,7 @@ Microsoft.Maui.Controls.IValueConverter.ConvertBack(object? value, System.Type! *REMOVED*override Microsoft.Maui.Controls.Handlers.Compatibility.PhoneFlyoutPageRenderer.WillRotate(UIKit.UIInterfaceOrientation toInterfaceOrientation, double duration) -> void ~virtual Microsoft.Maui.Controls.Handlers.Items.ItemsViewController.DetermineCellReuseId(Foundation.NSIndexPath indexPath) -> string override Microsoft.Maui.Controls.Handlers.Items.ItemsViewHandler.GetDesiredSize(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size +override Microsoft.Maui.Controls.Handlers.Items.CarouselViewHandler.GetDesiredSize(double widthConstraint, double heightConstraint) -> Microsoft.Maui.Graphics.Size ~Microsoft.Maui.Controls.Element.AddLogicalChild(Microsoft.Maui.Controls.Element element) -> void ~Microsoft.Maui.Controls.Element.InsertLogicalChild(int index, Microsoft.Maui.Controls.Element element) -> void ~Microsoft.Maui.Controls.Element.RemoveLogicalChild(Microsoft.Maui.Controls.Element element) -> bool From 89810862c5a7afc951a96634305bcedc1210b796 Mon Sep 17 00:00:00 2001 From: nielsvanderknaap Date: Fri, 19 Jan 2024 12:09:03 +0100 Subject: [PATCH 3/7] Refactor to expression body --- .../src/Core/Handlers/Items/CarouselViewHandler.iOS.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs b/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs index 814a85d509b2..7deaa83dbccd 100644 --- a/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs +++ b/src/Controls/src/Core/Handlers/Items/CarouselViewHandler.iOS.cs @@ -66,9 +66,7 @@ public static void MapLoop(CarouselViewHandler handler, CarouselView carouselVie (handler.Controller as CarouselViewController)?.UpdateLoop(); } - public override Size GetDesiredSize(double widthConstraint, double heightConstraint) - { - return this.GetDesiredSizeFromHandler(widthConstraint, heightConstraint); - } + public override Size GetDesiredSize(double widthConstraint, double heightConstraint) => + this.GetDesiredSizeFromHandler(widthConstraint, heightConstraint); } } \ No newline at end of file From 8f388aadfe2ee42736235331fdb3ae6b2ca53899 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Tue, 6 Feb 2024 17:33:06 +0000 Subject: [PATCH 4/7] Add test case for issue #19657 --- .../Issues/Issue19657.xaml | 31 +++++++++++++ .../Issues/Issue19657.xaml.cs | 43 +++++++++++++++++++ .../tests/UITests/Tests/Issues/Issue19657.cs | 27 ++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml create mode 100644 src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml.cs create mode 100644 src/Controls/tests/UITests/Tests/Issues/Issue19657.cs diff --git a/src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml b/src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml new file mode 100644 index 000000000000..470b8552a130 --- /dev/null +++ b/src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml.cs b/src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml.cs new file mode 100644 index 000000000000..6be67196e65f --- /dev/null +++ b/src/Controls/samples/Controls.Sample.UITests/Issues/Issue19657.xaml.cs @@ -0,0 +1,43 @@ +using System; +using System.ComponentModel; +using Microsoft.Maui.Controls; +using Microsoft.Maui.Controls.Xaml; +using Microsoft.Maui.Graphics; +using System.Collections.Generic; + +namespace Maui.Controls.Sample.Issues +{ + [XamlCompilation(XamlCompilationOptions.Compile)] + [Issue(IssueTracker.Github, 19657, "CarouselView Content disappears when 'Loop' is false and inside ScrollView", PlatformAffected.iOS)] + public partial class Issue19657 : ContentPage + { + + public Issue19657() + { + InitializeComponent(); + var exampleItems = new List + { + new SampleCarouselItem1( "First", "First CarouselView item" ), + new SampleCarouselItem1( "Second", "Second CarouselView item" ), + new SampleCarouselItem1( "Third", "Third CarouselView item" ), + new SampleCarouselItem1( "Fourth", "Fourth CarouselView item" ), + new SampleCarouselItem1( "Fifth", "Fifth CarouselView item" ), + }; + + carousel.ItemsSource = exampleItems; + } + + class SampleCarouselItem1 + { + public SampleCarouselItem1(string title, string description ) + { + Title = title; + Description = description; + } + + public string Title { get; set; } + public string Description { get; set; } + public Color Color { get; set; } + } + } +} \ No newline at end of file diff --git a/src/Controls/tests/UITests/Tests/Issues/Issue19657.cs b/src/Controls/tests/UITests/Tests/Issues/Issue19657.cs new file mode 100644 index 000000000000..34aa228df1d0 --- /dev/null +++ b/src/Controls/tests/UITests/Tests/Issues/Issue19657.cs @@ -0,0 +1,27 @@ +using System.Drawing; +using NUnit.Framework; +using UITest.Appium; +using UITest.Core; + +namespace Microsoft.Maui.AppiumTests.Issues +{ + public class Issue19657 : _IssuesUITest + { + public Issue19657(TestDevice device) : base(device) { } + + public override string Issue => "CarouselView Content disappears when 'Loop' is false and inside ScrollView"; + + [Test] + public void CarouselItemLoadsInCorrectPosition() + { + _ = App.WaitForElement("WaitHere"); + + var element = App.WaitForElement("First"); + + this.IgnoreIfPlatforms(new TestDevice[] { TestDevice.Android, TestDevice.Mac, TestDevice.Windows }, + "The bug only happens on iOS; see https://github.com/dotnet/maui/issues/19657"); + + VerifyScreenshot(); + } + } +} \ No newline at end of file From 4e0db6c559608e45aa0ae24a6a65a698d73553cb Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Tue, 6 Feb 2024 17:33:34 +0000 Subject: [PATCH 5/7] =?UTF-8?q?[Tests]=C2=A0Enable=20CarouselTest=20on=20i?= =?UTF-8?q?OS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Controls/tests/UITests/Tests/CarouselViewUITests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs b/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs index cac5827cd7ac..ec2874199d38 100644 --- a/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs +++ b/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs @@ -28,9 +28,9 @@ protected override void FixtureTeardown() [Test] public async Task CarouselViewSetPosition() { - if (Device != TestDevice.Android) + if (Device != TestDevice.Android || Device != TestDevice.iOS) { - Assert.Ignore("For now, running this test only on Android."); + Assert.Ignore("For now, running this test only on Android and iOS."); } else { From fb9e0349f4790ec4d8428b624b952078908b65ef Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Tue, 6 Feb 2024 18:43:52 +0000 Subject: [PATCH 6/7] =?UTF-8?q?Revert=20"[Tests]=C2=A0Enable=20CarouselTes?= =?UTF-8?q?t=20on=20iOS"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 4e0db6c559608e45aa0ae24a6a65a698d73553cb. --- src/Controls/tests/UITests/Tests/CarouselViewUITests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs b/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs index ec2874199d38..cac5827cd7ac 100644 --- a/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs +++ b/src/Controls/tests/UITests/Tests/CarouselViewUITests.cs @@ -28,9 +28,9 @@ protected override void FixtureTeardown() [Test] public async Task CarouselViewSetPosition() { - if (Device != TestDevice.Android || Device != TestDevice.iOS) + if (Device != TestDevice.Android) { - Assert.Ignore("For now, running this test only on Android and iOS."); + Assert.Ignore("For now, running this test only on Android."); } else { From 09bd3025f2ec2ce88baf28fedaf21340dd84e3a5 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Wed, 7 Feb 2024 11:43:46 +0000 Subject: [PATCH 7/7] Add image for test --- .../ios/CarouselItemLoadsInCorrectPosition.png | Bin 0 -> 38767 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Controls/tests/UITests/snapshots/ios/CarouselItemLoadsInCorrectPosition.png diff --git a/src/Controls/tests/UITests/snapshots/ios/CarouselItemLoadsInCorrectPosition.png b/src/Controls/tests/UITests/snapshots/ios/CarouselItemLoadsInCorrectPosition.png new file mode 100644 index 0000000000000000000000000000000000000000..93287ce299e0431fc6235629e086425e211d33e6 GIT binary patch literal 38767 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