我成功地在我的 Xamarin.Forms Android 项目中创建了一个自定义渲染器,以添加一个自定义后退按钮图标而不是本机后退按钮。我使用的渲染器如下:
public class MyNavigationPageRenderer: Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer
{
Context _context;
AndroidX.AppCompat.Widget.Toolbar _toolbar;
public MyNavigationPageRenderer(Context context) : base(context)
{
_context = context;
}
public override void OnViewAdded(Android.Views.View child)
{
base.OnViewAdded(child);
if (child.GetType() == typeof(AndroidX.AppCompat.Widget.Toolbar))
{
_toolbar = (AndroidX.AppCompat.Widget.Toolbar)child;
_toolbar.SetNavigationIcon(Resource.Drawable.Navigation_backbutton);
}
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
if (_toolbar != null)
{
if (_toolbar.NavigationIcon != null)
{
_toolbar.NavigationIcon = AndroidX.Core.Content.ContextCompat.GetDrawable(_context, Resource.Drawable.Navigation_backbutton);
}
}
}
}
在 Xamarin 中,由于我们需要为 Xamarin.IOS 项目使用单独的渲染器,因此我也需要在那里使用相同的逻辑。但是由于使用的库和类不同,我不确定如何进行。任何有关如何进行相同操作的帮助表示赞赏。
答案 0 :(得分:0)
您可以尝试以下方法:
[assembly: ExportRenderer(typeof(NavigationPage), typeof(MyRenderer))]
namespace FormsApp.iOS
{
class MyRenderer : NavigationRenderer
{
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
if (this.NavigationBar.TopItem.BackBarButtonItem == null)
{
this.NavigationBar.BackIndicatorImage = UIImage.FromFile("xx.png");
this.NavigationBar.BackIndicatorTransitionMaskImage = UIImage.FromFile("xx.png");
this.NavigationBar.TopItem.BackBarButtonItem = new UIBarButtonItem("", UIBarButtonItemStyle.Plain, null);
}
}
}
}
而here是Xamarin.iOS中自定义UINavigationBar的官方示例,可以参考。