在Xamarin.Forms (iOS Android)上,我需要修改 载荷指示器 在RefreshView上的位置。我需要增加偏移量,所以如果你有一个条形图与ScrollView-RefreshView组合重叠,并触发pullOnRefresh,那么该指标是可见的。
编辑:感谢 小蒋 - MSFT- Android解决方案
我也实现了xamarin.iOS的解决方案。
[assembly: ExportRenderer(typeof(RefreshView), typeof(CustomRefreshViewRenderer))]
namespace CustomRefresh.iOS {
public class CustomRefreshViewRenderer : RefreshViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<RefreshView> e)
{
base.OnElementChanged(e);
foreach (var nativeView in Subviews)
updateRefreshSettings(nativeView);
}
void updateRefreshSettings(UIView view) {
if (view is UIScrollView)
{
var scrollView = view as UIScrollView;
if (scrollView.RefreshControl != null)
{
var bounds = scrollView.RefreshControl.Bounds;
scrollView.RefreshControl.Bounds = new CGRect(bounds.X, -(100), bounds.Width, bounds.Height);
}
}
//add more scrollable view types
}
}
}
你可以自定义一个 RefreshViewRenderer 以实现这一目标。
在 安卓系统 ,有一个 MOriginalOffsetTop
来修改加载指标的偏移量。此外,还可以使用SetProgressViewOffset来设置指标的起始和结束位置。
代码如下。
using Android.Content;
using RefreshViewDemo.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(RefreshView), typeof(CustomRefreshViewRenderer))]
namespace RefreshViewDemo.Droid
{
public class CustomRefreshViewRenderer : RefreshViewRenderer
{
public CustomRefreshViewRenderer(Context context) : base(context)
{
MOriginalOffsetTop = 100;
// SetProgressViewOffset(true, 100, 101);
}
}
}
在 iOS 负载指标属于 UIRefreshControl
的 UIScrollView 没有直接的方法来改变它的偏移量 . 除非在Renderer中覆盖所有内容视图,然后可以实现。你可以参考这个 Xamarin.FormsXamarin.Forms.Platform.iOSRenderersRefreshViewRenderer.cs 来了解 RefreshView
是由......组成的。
共享代码是基于这个官方示例。https:/docs.microsoft.comen-ussamplesxamarinxamarin-forms-samplesuserinterface-refreshviewdemo。
对于Android,只需要创建一个 CustomRefreshViewRenderer 类在安卓解决方案中的 。
的效果。SetProgressViewOffset(true, 100, 101)
它似乎是指标不动。