diff options
author | Adrian Knight <adrianknight89@outlook.com> | 2016-09-23 00:32:32 -0500 |
---|---|---|
committer | Adrian Knight <adrianknight89@outlook.com> | 2016-09-23 00:32:32 -0500 |
commit | a708ad9593c810b3100627d9d0bbc2eb2dd70246 (patch) | |
tree | 7652df60b022515cb2ba7c972b9b62a4ecbc952a | |
parent | 420ceb37d0d1d78dde17c717614c6874684a399e (diff) | |
download | xamarin-forms-a708ad9593c810b3100627d9d0bbc2eb2dd70246.tar.gz xamarin-forms-a708ad9593c810b3100627d9d0bbc2eb2dd70246.tar.bz2 xamarin-forms-a708ad9593c810b3100627d9d0bbc2eb2dd70246.zip |
iOS ScrollView should not scroll out of place on scrolling to element
3 files changed, 69 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44461.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44461.cs new file mode 100644 index 00000000..c0937a8f --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla44461.cs @@ -0,0 +1,49 @@ +using Xamarin.Forms.CustomAttributes; +using Xamarin.Forms.Internals; + +namespace Xamarin.Forms.Controls +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 44461, "ScrollToPosition.Center works differently on Android and iOS", PlatformAffected.iOS)] + public class Bugzilla44461 : TestContentPage + { + protected override void Init() + { + var grid = new Grid + { + RowSpacing = 0, + }; + + var scrollView = new ScrollView + { + Orientation = ScrollOrientation.Horizontal, + VerticalOptions = LayoutOptions.Center, + BackgroundColor = Color.Yellow, + HeightRequest = 50 + }; + grid.Children.Add(scrollView); + + var stackLayout = new StackLayout + { + Orientation = StackOrientation.Horizontal, + Spacing = 20 + }; + + for (var i = 0; i < 10; i++) + { + var button = new Button + { + Text = "Button" + i + }; + button.Clicked += (sender, args) => + { + scrollView.ScrollToAsync(sender as Button, ScrollToPosition.Center, true); + }; + + stackLayout.Children.Add(button); + } + scrollView.Content = stackLayout; + Content = grid; + } + } +}
\ No newline at end of file diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems index adf173df..92c4f8d4 100644 --- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems @@ -124,6 +124,7 @@ <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42364.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla42519.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla43516.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Bugzilla44461.cs" /> <Compile Include="$(MSBuildThisFileDirectory)CarouselAsync.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34561.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Bugzilla34727.cs" /> diff --git a/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs index 1e8ea1fc..bfb24337 100644 --- a/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs +++ b/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs @@ -208,6 +208,25 @@ namespace Xamarin.Forms.Platform.iOS else { var positionOnScroll = Controller.GetScrollPositionForElement(e.Element as VisualElement, e.Position); + + if (positionOnScroll.X < 0) + { + positionOnScroll.X = 0; + } + else if (positionOnScroll.X > ContentSize.Width - Bounds.Size.Width) + { + positionOnScroll.X = ContentSize.Width - Bounds.Size.Width; + } + + if (positionOnScroll.Y < 0) + { + positionOnScroll.Y = 0; + } + else if (positionOnScroll.Y > ContentSize.Height - Bounds.Size.Height) + { + positionOnScroll.Y = ContentSize.Height - Bounds.Size.Height; + } + switch (ScrollView.Orientation) { case ScrollOrientation.Horizontal: |