Репликация выпадающего ToolbarItem "More" в Xamarin.Forms

Я изо всех сил, как я мог повторить выпадающий ToolbarItem от Xamarin.Forms когда ToolbarItemзаказ установлен на Secondary для IOS, чтобы он выглядел так, как для Android.


Вот несколько изображений, чтобы лучше объяснить, что я ищу:

Как это работает на Android:

  1. Код:
ToolbarItem toolbarItem = new ToolbarItem()
{
  Text = "ToolbarItem",
  Order = ToolbarItemOrder.Secondary
};
  1. Изображения о том, как это выглядит на Android:

Изображение, показывающее значок "Больше"

  • Изображение, показывающее значок

Изображение, показывающее значок "Дополнительно", расширен, чтобы показать больше элементов панели инструментов

  • Изображение, показывающее значок

По умолчанию на панели инструментов отсутствует значок "Дополнительно". Order в Secondary в iOS Вместо этого происходит то, что создается панель под панелью навигации, которая включает в себя все элементы панели инструментов - то, что я не хочу иметь для своего приложения.


Это пример того, как это было достигнуто ранее на IOS:

Снимок экрана, который я взял из одного из моих приложений, который реализует этот эффект

  • Это был экран из моих приложений

1 ответ

Решение

В родной iOS вы можете использовать UIPopoverController для достижения вашего эффекта. Но обратите внимание, что этот элемент управления можно использовать только в iPad.

Поскольку вы используете Xamarin.Forms, мы можем создать специальный рендерер на платформе iOS, чтобы получить это.

Во-первых, создайте рендерер страниц для отображения UIPopoverController, Мы можем показать его из UIBarButtonItem или UIView в зависимости от вашего запроса. Здесь я использую UIBarButtonItem как:

//I defined the navigateItem in the method ViewWillAppear
public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);

    rightItem = new UIBarButtonItem("More", UIBarButtonItemStyle.Plain, (sender, args) =>
    {
        UIPopoverController popView = new UIPopoverController(new ContentViewController());
        popView.PopoverContentSize = new CGSize(200, 300);
        popView.PresentFromBarButtonItem(rightItem, UIPopoverArrowDirection.Any, true);
    });

    NavigationController.TopViewController.NavigationItem.SetRightBarButtonItem(leftItem, true);
}

Во-вторых, создайте контент ViewController в UIPopoverController(так же, как вторичный список в Android):

public class ContentViewController : UIViewController
{
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        UITableView tableView = new UITableView(new CGRect(0, 0, 200, 300));
        tableView.Source = new MyTableViewSource();
        View.AddSubview(tableView);
    }
}

public class MyTableViewSource : UITableViewSource
{
    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
    {
        UITableViewCell cell = tableView.DequeueReusableCell(new NSString("Cell"));
        if (cell == null)
        {
            cell = new UITableViewCell(UITableViewCellStyle.Default, new NSString("Cell"));
        }

        cell.TextLabel.Text = "Item" + indexPath.Row;

        return cell;
    }

    public override nint RowsInSection(UITableView tableview, nint section)
    {
        return 10;
    }
}

Наконец, мы можем показать это на экране, позвонив PresentFromBarButtonItem,

Другие вопросы по тегам