减少工具栏图标填充(Xamarin.Forms)

Cam*_*ood 1 xamarin xamarin.forms

有没有一种方法可以在Xamarin.Forms中缩小导航栏上两个图标之间的间距?

请参见下图以解决问题:

图标间距太大

此距离适合2个图标,但是使用3个图标时,它会占据导航栏的一半-可以以任何方式减少它吗?

提前致谢。

小智 5

您可以通过创建NavigationRenderer或PageRenderer两种方式来实现。您必须重新创建UIButton来替换每个工具栏项,并从Xamarin.Forms项中获取委托的图像。将CGREct设置为UIButton时,可以在此处调整height和width属性。

这是我使用PageRenderer的实现。

[assembly: Xamarin.Forms.ExportRenderer(typeof(Xamarin.Forms.ContentPage), typeof(ContentPageRenderer))]
public class ContentPageRenderer : PageRenderer
{
     protected override void OnElementChanged(VisualElementChangedEventArgs e)
     {
         base.OnElementChanged(e);
     }

     public override void ViewWillAppear(bool animated)
     {
         base.ViewWillAppear(animated);

         var navigationItem = this.NavigationController.TopViewController.NavigationItem;

         foreach (var rightItem in navigationItem.RightBarButtonItems)
         {
             var button = new UIButton(new CGRect(0, 0, 50, 50));
             button.SetImage(rightItem.Image, UIControlState.Normal);

             FieldInfo fi = rightItem.GetType().GetField("clicked", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy);
             Delegate del = (Delegate)fi.GetValue(rightItem);
             button.TouchUpInside += (EventHandler)del;

             rightItem.CustomView = button;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您动态更改Xamarin.Forms页面中的工具栏项目,它将覆盖渲染更改。

希望这可以帮助。