【发布时间】: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