gpt4 book ai didi

android - 在 Xamarin.Forms 中复制下拉 ToolbarItem "More"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:05 28 4
gpt4 key购买 nike

ToolbarItem 的顺序设置为 Secondary 用于 IOS,以使其看起来像 Android 一样。


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

它在 Android 上的工作原理:

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

显示“更多”图标的图片

  • > Image showing the "More" icon

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

  • > Image showing the "More" icon expanded to show more toolbar items

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


这是之前在IOS上是如何实现的例子:

我从实现此功能的应用程序之一截取的屏幕截图 效果

  • > A screenshot I took from one of my Apps that implements this effect

最佳答案

在 native 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 将其显示在屏幕上。

关于android - 在 Xamarin.Forms 中复制下拉 ToolbarItem "More",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48128694/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com