Skip to content

Commit ca9a7b6

Browse files
committed
Revert "Fix Android ScrollView to Measure Content Correct (#30964)"
This reverts commit db10a7a.
1 parent 38c0051 commit ca9a7b6

File tree

4 files changed

+31
-51
lines changed

4 files changed

+31
-51
lines changed

src/Controls/src/Core/ScrollView/ScrollView.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -515,8 +515,7 @@ Size ICrossPlatformLayout.CrossPlatformArrange(Rect bounds)
515515
return bounds.Size;
516516
}
517517

518-
Size IContentView.CrossPlatformMeasure(double widthConstraint, double heightConstraint) =>
519-
((ICrossPlatformLayout)this).CrossPlatformMeasure(widthConstraint, heightConstraint);
518+
Size IContentView.CrossPlatformMeasure(double widthConstraint, double heightConstraint) => ((ICrossPlatformLayout)this).CrossPlatformMeasure(widthConstraint, heightConstraint);
520519

521520
Size IContentView.CrossPlatformArrange(Rect bounds) =>
522521
((ICrossPlatformLayout)this).CrossPlatformArrange(bounds);

src/Core/src/Handlers/ScrollView/ScrollViewHandler.Android.cs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ protected override void ConnectHandler(MauiScrollView platformView)
2525
{
2626
base.ConnectHandler(platformView);
2727
platformView.ScrollChange += ScrollChange;
28+
platformView.CrossPlatformArrange = VirtualView.CrossPlatformArrange;
2829
}
2930

3031
protected override void DisconnectHandler(MauiScrollView platformView)
3132
{
3233
base.DisconnectHandler(platformView);
3334
platformView.ScrollChange -= ScrollChange;
35+
platformView.CrossPlatformArrange = null;
3436
}
3537

3638
public override Size GetDesiredSize(double widthConstraint, double heightConstraint)
@@ -232,10 +234,7 @@ static void InsertInsetView(IScrollViewHandler handler, IScrollView scrollView,
232234

233235
Size ICrossPlatformLayout.CrossPlatformMeasure(double widthConstraint, double heightConstraint)
234236
{
235-
if (VirtualView is not { } scrollView)
236-
{
237-
return Size.Zero;
238-
}
237+
var scrollView = VirtualView;
239238

240239
var padding = scrollView.Padding;
241240

@@ -244,25 +243,31 @@ Size ICrossPlatformLayout.CrossPlatformMeasure(double widthConstraint, double he
244243
return new Size(padding.HorizontalThickness, padding.VerticalThickness);
245244
}
246245

247-
var scrollOrientation = scrollView.Orientation;
248-
var contentWidthConstraint = scrollOrientation is ScrollOrientation.Horizontal or ScrollOrientation.Both ? double.PositiveInfinity : widthConstraint;
249-
var contentHeightConstraint = scrollOrientation is ScrollOrientation.Vertical or ScrollOrientation.Both ? double.PositiveInfinity : heightConstraint;
250-
var contentSize = scrollView.MeasureContent(scrollView.Padding, contentWidthConstraint, contentHeightConstraint, !double.IsInfinity(contentWidthConstraint), !double.IsInfinity(contentHeightConstraint));
246+
// Exclude the padding while measuring the internal content ...
247+
var measurementWidth = widthConstraint - padding.HorizontalThickness;
248+
var measurementHeight = heightConstraint - padding.VerticalThickness;
249+
250+
var result = (scrollView as ICrossPlatformLayout).CrossPlatformMeasure(measurementWidth, measurementHeight);
251+
252+
// ... and add the padding back in to the final result
253+
var fullSize = new Size(result.Width + padding.HorizontalThickness, result.Height + padding.VerticalThickness);
251254

252255
if (double.IsInfinity(widthConstraint))
253256
{
254-
widthConstraint = contentSize.Width;
257+
widthConstraint = result.Width;
255258
}
256259

257260
if (double.IsInfinity(heightConstraint))
258261
{
259-
heightConstraint = contentSize.Height;
262+
heightConstraint = result.Height;
260263
}
261264

262-
return contentSize.AdjustForFill(new Rect(0, 0, widthConstraint, heightConstraint), scrollView.PresentedContent);
265+
return fullSize.AdjustForFill(new Rect(0, 0, widthConstraint, heightConstraint), scrollView.PresentedContent);
263266
}
264267

265-
Size ICrossPlatformLayout.CrossPlatformArrange(Rect bounds) =>
266-
(VirtualView as ICrossPlatformLayout)?.CrossPlatformArrange(bounds) ?? Size.Zero;
268+
Size ICrossPlatformLayout.CrossPlatformArrange(Rect bounds)
269+
{
270+
return (VirtualView as ICrossPlatformLayout).CrossPlatformArrange(bounds);
271+
}
267272
}
268273
}

src/Core/src/Layouts/LayoutExtensions.cs

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -167,37 +167,6 @@ public static Size MeasureContent(this IContentView contentView, Thickness inset
167167
return new Size(contentSize.Width + inset.HorizontalThickness, contentSize.Height + inset.VerticalThickness);
168168
}
169169

170-
internal static Size MeasureContent(
171-
this IContentView contentView,
172-
Thickness inset,
173-
double widthConstraint,
174-
double heightConstraint,
175-
bool constrainPresentedContentWidthToExplicitDimsOnContentView,
176-
bool constrainPresentedContentHeightToExplicitDimsOnContentView)
177-
{
178-
var content = contentView.PresentedContent;
179-
180-
if (Dimension.IsExplicitSet(contentView.Width) && constrainPresentedContentWidthToExplicitDimsOnContentView)
181-
{
182-
widthConstraint = contentView.Width;
183-
}
184-
185-
if (Dimension.IsExplicitSet(contentView.Height) && constrainPresentedContentHeightToExplicitDimsOnContentView)
186-
{
187-
heightConstraint = contentView.Height;
188-
}
189-
190-
var contentSize = Size.Zero;
191-
192-
if (content != null)
193-
{
194-
contentSize = content.Measure(widthConstraint - inset.HorizontalThickness,
195-
heightConstraint - inset.VerticalThickness);
196-
}
197-
198-
return new Size(contentSize.Width + inset.HorizontalThickness, contentSize.Height + inset.VerticalThickness);
199-
}
200-
201170
public static void ArrangeContent(this IContentView contentView, Rect bounds)
202171
{
203172
if (contentView.PresentedContent == null)

src/Core/src/Platform/Android/MauiScrollView.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,7 @@ public void SetOrientation(ScrollOrientation orientation)
9797
{
9898
if (_hScrollView == null)
9999
{
100-
_hScrollView = new MauiHorizontalScrollView(Context, this)
101-
{
102-
FillViewport = true
103-
};
104-
100+
_hScrollView = new MauiHorizontalScrollView(Context, this);
105101
_hScrollView.HorizontalFadingEdgeEnabled = HorizontalFadingEdgeEnabled;
106102
_hScrollView.SetFadingEdgeLength(HorizontalFadingEdgeLength);
107103
SetHorizontalScrollBarVisibility(_horizontalScrollVisibility);
@@ -233,6 +229,15 @@ protected override void OnLayout(bool changed, int left, int top, int right, int
233229
hScrollViewHeight = _isBidirectional ? Math.Max(hScrollViewHeight, scrollViewContentHeight) : hScrollViewHeight;
234230
_hScrollView.Layout(0, 0, hScrollViewWidth, hScrollViewHeight);
235231
}
232+
233+
if (CrossPlatformArrange == null)
234+
{
235+
return;
236+
}
237+
238+
var destination = Context!.ToCrossPlatformRectInReferenceFrame(left, top, right, bottom);
239+
240+
CrossPlatformArrange(destination);
236241
}
237242

238243
public void ScrollTo(int x, int y, bool instant, Action finished)
@@ -316,6 +321,8 @@ void IOnScrollChangeListener.OnScrollChange(NestedScrollView? v, int scrollX, in
316321
{
317322
OnScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
318323
}
324+
325+
internal Func<Graphics.Rect, Graphics.Size>? CrossPlatformArrange { get; set; }
319326
}
320327

321328
internal class MauiHorizontalScrollView : HorizontalScrollView, IScrollBarView

0 commit comments

Comments
 (0)