我已经看过很多关于处理iOS弹出窗口轮换的帖子,但是大多数都是针对< iOS8和/或Swift / ObjC。如何使用UIPopoverPresentationController
和Xamarin.iOS执行此操作?我需要把它放在屏幕的中央。
public override void ViewDidLoad()
{
...
_menuController.PopoverPresentationController.PermittedArrowDirections = 0;
_menuController.PopoverPresentationController.WillReposition += OnWillReposition;
}
private void OnMenuSelected(object sender, EventArgs eventArgs)
{
InitializePopover();
PresentViewController(_menuController, true, null);
}
private void OnWillReposition(object sender, UIPopoverPresentationControllerRepositionEventArgs args)
{
InitializePopover();
}
private void InitializePopover()
{
_menuController.PopoverPresentationController.SourceRect = GetCenterRect();
_menuController.PopoverPresentationController.SourceView = View;
}
private CGRect GetCenterRect()
{
var midX = View.Bounds.GetMidX();
var midY = View.Bounds.GetMidY();
return new CGRect(midX, midY, 0, 0);
}
轮换时会调用 OnWillReposition
,但设置SourceRect
和SourceView
似乎不会生效。当我再次旋转时,我可以在调试期间看到这些属性具有旧值。
到目前为止我见过的热门链接:
seems like it should work but doesn't(我正在听 错误的事件?)
potential solution但我会约束什么?
其他想法:
我可以在ViewDidLayoutSubviews
重新定位吗?怎么样?
使用UIBarButtonItem
不是一个真正的选择,但可能是一个看不见的选项?
我应该解雇并再次出席吗?看起来很丑陋,我得到例外......
我应该放弃并简单地设置另一个视图吗?
答案 0 :(得分:0)
我在张贴之前就弄明白了。我的问题是我每次都没有设置PermittedArrowDirections
。 Vent:谁认为这是个好主意?无论如何,在完成初始化的那部分之后,我只需在ViewDidLayoutSubviews
中调用它,如下所示:
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
InitializePopover();
}
private void InitializePopover()
{
_menuController.PopoverPresentationController.PermittedArrowDirections = 0;
_menuController.PopoverPresentationController.SourceRect = GetCenterRect();
_menuController.PopoverPresentationController.SourceView = View;
}
所以我根本不使用UIPopoverPresentationController.WillReposition
事件。我希望这有助于某人 - 我不希望我最大的敌人经历所有的挫折。