Репликация выпадающего ToolbarItem "More" в Xamarin.Forms
Я изо всех сил, как я мог повторить выпадающий ToolbarItem
от Xamarin.Forms
когда ToolbarItem
заказ установлен на Secondary
для IOS, чтобы он выглядел так, как для Android.
Вот несколько изображений, чтобы лучше объяснить, что я ищу:
Как это работает на Android:
- Код:
ToolbarItem toolbarItem = new ToolbarItem()
{
Text = "ToolbarItem",
Order = ToolbarItemOrder.Secondary
};
- Изображения о том, как это выглядит на 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
,