3

我正在努力如何ToolbarItem从IOS的订单设置为 IOSXamarin.Forms时复制下拉菜单,以使其看起来像在 Android 上一样。ToolbarItemSecondary


这里有一些图片可以更好地解释我在寻找什么:

它如何在 Android 上运行:

  1. 代码:
ToolbarItem toolbarItem = new ToolbarItem()
{
  Text = "ToolbarItem",
  Order = ToolbarItemOrder.Secondary
};
  1. 有关它在 Android 上的外观的图片:

显示“更多”图标的图像

  • 图片显示

显示“更多”图标的图像已展开以显示更多工具栏项

  • 图片显示

OrderSecondaryiOS 中设置为时,工具栏上没有默认的“更多”图标。取而代之的是,在导航栏下方创建了一个栏,其中包括所有工具栏项目——我不希望我的应用程序拥有这些项目。


这是以前在 IOS 上如何实现的示例:

我从实现此效果的一个应用程序中截取的屏幕截图

  • 我从实现此效果的一个应用程序中截取的屏幕截图
4

1 回答 1

2

在原生 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);
}

其次,在UIPopoverController中构造内容ViewController(就像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

于 2018-01-08T09:27:21.810 回答