Xamarin.iOS Popovers on Rotate

时间:2018-04-22 18:53:26

标签: ios xamarin xamarin.ios popover

我已经看过很多关于处理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,但设置SourceRectSourceView似乎不会生效。当我再次旋转时,我可以在调试期间看到这些属性具有旧值。

到目前为止我见过的热门链接:

其他想法:

  • 我可以在ViewDidLayoutSubviews重新定位吗?怎么样?

  • 使用UIBarButtonItem不是一个真正的选择,但可能是一个看不见的选项?

  • 我应该解雇并再次出席吗?看起来很丑陋,我得到例外......

  • 我应该放弃并简单地设置另一个视图吗?

1 个答案:

答案 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事件。我希望这有助于某人 - 我不希望我最大的敌人经历所有的挫折。