ScrollView允许内容溢出

时间:2017-10-30 11:13:57

标签: android xamarin xamarin.forms xamarin.android

目标

我试图允许scrollview溢出(不剪辑其子节点)。我使用旋转木马视图,但使用scrollview无法获得相同的结果。

这样做的想法是使scrollview居中并允许溢出,以便内容可以看起来居中(用作标签)。

代码

在Xamarin表格中使用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);
        }
    }
}

其他尝试

我还创建了一个函数来通过 ALL 父级来禁用剪辑,看它是否是导致问题的父级。这仍然没有奏效。

那么我们如何允许scrollview内容超出其范围?

注意:我正在标记android,因为这可能是对原生控件的一个简单误解。

更新

尽我所能制作出我想要的效果图像。 ScrollView

所以大蓝色边框是scrollview中间的contentview。滚动内容仅在scrollview本身内部可见时(它始终如何工作)。我试图不剪辑内容,因此总能看到所有内容(溢出),而不仅仅是scrollview内部。

更新2:

以下链接可以解释我之后的效果。请看一下,任何问题都让我知道。

Paging-enabled UIScrollView With Previews

注意:我已将触摸事件链接起来,因此它只会禁用我需要找到修复的剪辑边界。

1 个答案:

答案 0 :(得分:4)

您可以尝试使用与高程/阴影剪裁相同的方法。

添加父布局,向父布局添加填充(以实现居中项目)并在父布局中设置clipToPadding=false

由于问题是关于Xamarin,我只是提到,对于原生Android开发,您可以使用RecyclerViewSnapHelper类的实现实现相同的中心锁定效果。