在 Xamarin.Forms RefreshView 中更改加载指示器偏移量
Change loading indicator Offset in Xamarin.Forms RefreshView
On Xamarin.Forms (iOS Android),我需要更改 RefreshView 上的 loading-indicator 位置。我需要添加偏移量,因此如果您有一个条与 ScrollView-RefreshView 组合重叠并触发 pullOnRefresh,则指示器可见。
Loading-indicator in the top edge
编辑:感谢
我也为 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 来实现。
在Android中有一个MOriginalOffsetTop
修改loading indicator的offset。另外,也可以使用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中,loading indicator属于UIScrollView的UIRefreshControl
,没有直接的办法改变它的偏移量。除非重写渲染器中的所有内容视图然后才能实现。你可以参考这个 Xamarin.Forms/Xamarin.Forms.Platform.iOS/Renderers/RefreshViewRenderer.cs 来了解 RefreshView
是由什么组成的。
====================更新=====================
共享代码基于此官方示例:https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/userinterface-refreshviewdemo/
对于Android,只需要在android解决方案中创建一个CustomRefreshViewRendererclass即可。
SetProgressViewOffset(true, 100, 101)
的效果,好像指标不动了:
On Xamarin.Forms (iOS Android),我需要更改 RefreshView 上的 loading-indicator 位置。我需要添加偏移量,因此如果您有一个条与 ScrollView-RefreshView 组合重叠并触发 pullOnRefresh,则指示器可见。
Loading-indicator in the top edge
编辑:感谢
我也为 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 来实现。
在Android中有一个MOriginalOffsetTop
修改loading indicator的offset。另外,也可以使用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中,loading indicator属于UIScrollView的UIRefreshControl
,没有直接的办法改变它的偏移量。除非重写渲染器中的所有内容视图然后才能实现。你可以参考这个 Xamarin.Forms/Xamarin.Forms.Platform.iOS/Renderers/RefreshViewRenderer.cs 来了解 RefreshView
是由什么组成的。
====================更新=====================
共享代码基于此官方示例:https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/userinterface-refreshviewdemo/
对于Android,只需要在android解决方案中创建一个CustomRefreshViewRendererclass即可。
SetProgressViewOffset(true, 100, 101)
的效果,好像指标不动了: