2016-08-25 4 views
1

ナビゲーションバーの2つのアイコンの間隔をXamarin.Formsで減らす方法はありますか?ツールバーのアイコンの埋め込み(Xamarin.Forms)

問題については、以下の画像を参照してください。

Icons with too much spacing

この距離は2つのアイコンの罰金ですが、3を使用した場合、それはナビゲーションバーの半分を占める - これを削減することができる任意の方法を?

ありがとうございます。

+0

バーボタンを使用していますか?あなたが使用している画像のサイズをチェックすると、バーボタンのサイズが大きくなります。 –

+0

イメージは24x24で、それはすべての水平スペースを占有します。 私はXamarin.Forms.ToolbarItemsを使用しています。 –

+0

あなたの例をより良く見るためにプリントスクリーンを追加してください。 –

答えて

3

NavigationRendererまたはPageRendererを作成することで、2通りの方法があります。各ツールバー項目を置き換えるためにUIButtonを再作成し、Xamarin.Forms項目からデリゲートを取得する必要があります。 CGREctをUIButtonに設定すると、ここで高さと幅のプロパティを調整できます。

私の実装は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; 
     } 
    } 
} 

注:Xamarin.Formsページのツールバー項目を動的に変更すると、レンダリングの変更が上書きされます。

これが役に立ちます。

+0

ボタンをクリックしたときにフェードイン/アウトエフェクトを保持する方法はありますか? – rraallvv

0

あり、あなたが望む効果を得る私のサンプルコードをチェックするための簡単な方法です:

public class MainViewController : UIViewController 
{ 
    public MainViewController() 
    { 
     this.View.Frame = UIScreen.MainScreen.Bounds; 
     this.View.BackgroundColor = UIColor.Red; 

     UIImage image1 = UIImage.FromFile ("test1.png"); 
     UIImage image2 = UIImage.FromFile ("test2.png"); 

     //The regular way to set right bar items 
//  UIBarButtonItem barBtn1 = new UIBarButtonItem (image1, UIBarButtonItemStyle.Done, null); 
//  UIBarButtonItem barBtn2 = new UIBarButtonItem (image2, UIBarButtonItemStyle.Done, null); 
//  this.NavigationItem.SetRightBarButtonItems (new UIBarButtonItem[]{ barBtn1, barBtn2 }, true); 

     //Use CustomView with two UIButton as a right bar item 
     int btnLength = 35; 

     UIButton btn1 = new UIButton(); 
     btn1.Frame = new CGRect (0, 0, btnLength, btnLength); 
     btn1.SetImage (image1, UIControlState.Normal); 
     btn1.TouchUpInside += delegate { 
      Console.WriteLine("btn1 clicked."); 
     }; 

     UIButton btn2 = new UIButton(); 
     btn2.Frame = new CGRect (10+btnLength, 0, btnLength, btnLength); 
     btn2.SetImage (image2, UIControlState.Normal); 
     btn2.TouchUpInside += delegate { 
      Console.WriteLine("btn2 clicked."); 
     }; 

     UIView toolbar = new UIView (new CGRect (0, 0, 10+2*btnLength, btnLength)); 
     toolbar.BackgroundColor = UIColor.White; 

     toolbar.AddSubview (btn1); 
     toolbar.AddSubview (btn2); 

     this.NavigationItem.SetRightBarButtonItem (new UIBarButtonItem (toolbar),true); 
    } 
} 

が、これは2つの異なる方法のため、スクリーンショット、定期的なスタイルである:

enter image description here

CustomViewスタイル:

enter image description here

まだ問題が残っている場合は、ここに残しておいてください。後で確認します。

お手数ですがお手伝いします。

+0

この解決策は私の問題に適合しません - 私は 'Xamarin.Forms.ToolbarItem's'を使用しています。単に間隔を減らす方法はありませんか? –

+0

私はXamarin.Formsのコードのような同じ理論を使うことができるのかどうかは分かりませんが、NativeやXamarin.iOSのスペーシング天気を減らす方法はないと確信しています。ちょうどXamarin.Formsのために働いています。ちなみに、Xamarin.Formsの回答を得たいのであれば、 "Xamarin iOS"ではなく "Xamarin.Forms"というキーワードを使って、あなたの説明のキーワードにもっと注意を払う必要があります。 –

関連する問題