【问题标题】:ScrollView allow content overflowScrollView 允许内容溢出
【发布时间】:2017-10-30 11:13:56
【问题描述】:

目标

我试图让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,因为这可能是对原生控件的简单误解。


更新:

尽我所能制作我正在寻找的所需效果的图像。

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


更新 2:

下面的链接可以解释我追求的效果比我有的更好。请看一下,有任何问题请告诉我。

Paging-enabled UIScrollView With Previews

注意:我已将触摸事件关联起来,因此它只是禁用了我需要找到修复方法的剪辑边界。

【问题讨论】:

  • 你想达到什么效果,能不能给个图?我不明白ScrollViewer 的内容如何溢出,但你需要像淡入/淡出ScrollView 这样的效果吗?
  • @GraceFeng-MSFT 感谢您的评论。我觉得我可能没有很好地解释这一点,并试图创建一个更新来提供更多信息。如果这似乎无法解释,我可以制作一个项目并将其提供给您。 注意: 我相信我试图让 Android 已经拥有一个回收视图,使用它你可以使内容居中并滚动(它锁定在一个磁贴上并始终居中,就像游戏商店一样)。但我正在尝试在 Xamarin Forms 中执行此操作。
  • 如果使用Recyclerview可以实现,那么在XF中,可以尝试使用ViewRenderer进行自定义。
  • @GraceFeng-MSFT 目前,除了最后一部分之外,我的一切都按预期工作。让它工作起来应该很简单,因为我使用 iOS 的 1 行代码 (v.ClipsToBounds = false;)。尝试实现Recyclerview 将是一项艰巨的工作。
  • 您可以尝试使用与高程/阴影裁剪相同的方法。添加父布局,在父布局中添加padding(实现centered项)并在父布局中设置clipToPadding=false

标签: android xamarin xamarin.forms xamarin.android


【解决方案1】:

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

添加父布局,在父布局中添加padding(实现居中)并在父布局中设置clipToPadding=false

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

【讨论】:

  • 至于这个答案的第二部分,这是我的备份计划。我一直在阅读很难让 Recycler View 与 Xamarin Forms 一起工作。所以这个答案完成了我现在需要做的工作。再次感谢。我会尽快奖励赏金,看看是否有人可以更好地回答你! ;)
猜你喜欢
  • 1970-01-01
  • 2022-07-26
  • 2023-02-21
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2020-02-17
  • 1970-01-01
相关资源
最近更新 更多