目标
我试图使scrollview
可以溢出(而不是剪辑其子元素)。我已经在走马灯视图中实现了这个效果,但无法在scrollview
中获得相同的结果。
这个想法是将scrollview
居中并允许溢出,以使内容看起来居中(被用作选项卡)。
代码
Xamarin Forms中使用scrollview
:
var scrollView = new ScrollView
{
WidthRequest = 200,
HorizontalOptions = LayoutOptions.Center,
Orientation = ScrollOrientation.Horizontal,
Content = scrollViewContent,
IsClippedToBounds = false
};
这是我为 scrollview
编写的自定义渲染器:
public class CenteredScrollViewRenderer : ScrollViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.OldElement != null || this.Element == null)
return;
if (e.OldElement != null)
e.OldElement.PropertyChanged -= OnElementPropertyChanged;
e.NewElement.PropertyChanged += OnElementPropertyChanged;
}
protected void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (ChildCount > 0)
{
GetChildAt(0).HorizontalScrollBarEnabled = false;
GetChildAt(0).VerticalScrollBarEnabled = false;
GetChildAt(0).OverScrollMode = OverScrollMode.Never;
// Try and disable clip
((ViewGroup)GetChildAt(0)).SetClipToPadding(false);
((ViewGroup)GetChildAt(0)).SetClipChildren(false);
}
}
}
其他尝试
我还创建了一个函数来遍历所有父级以禁用裁剪,以查看是否有父级造成问题。这仍然没有起作用。
那么我们该如何允许 scrollview
内容溢出其边界呢?
注意:我标记了 Android,因为这可能是对本机控件的简单误解。
更新:
那么,大蓝色边框是中间的 scrollview
,位于 contentview
中间。只有当在 scrollview
内部时才能看到滚动内容(它总是这样工作的)。我正在尝试不裁剪内容,以便始终可以看到所有内容(溢出),而不仅仅是在 scrollview
内部。
更新 2:
下面的链接可能比我更好地解释了我想要的效果。请看一下,有任何问题请告诉我。
注意:我已将触摸事件链接起来,所以我只需要找到禁用裁剪边界的解决方法。
ScrollViewer
的内容怎么可能会溢出,但是您需要类似于ScrollView
淡入/淡出的效果吗? - Grace Fengv.ClipsToBounds = false;
)使其正常工作。如果要尝试实现Recyclerview
,那将是很多工作量,但几乎没有任何收益。 - RuddyclipToPadding=false
。 - damian