首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin.iOS UIPopoverPresentationController异常

Xamarin.iOS UIPopoverPresentationController异常
EN

Stack Overflow用户
提问于 2018-04-19 21:44:53
回答 2查看 1.4K关注 0票数 0

我很难在UIPopoverPresentationController上展示一个波波夫,我可以在网上找到什么,包括。什么都帮不上忙。下面是我创建的一个测试应用程序:

ViewController.cs

代码语言:javascript
复制
  public override void ViewDidLoad()
  {
     ...

     var popupView = new UIImageView(new CGRect(0, 0, 200, 200))
     {
        Image = UIImage.FromBundle("Menu")
     };

     _menuController = new UIViewController
     {
        ModalPresentationStyle = UIModalPresentationStyle.Popover,
        View = popupView
     };

     _presentationController = new UIPopoverPresentationController(_menuController, this)
     {
        SourceView = View,
        SourceRect = new CGRect(50, 50, 300, 300),
     };
  }

我在按下按钮时说:

代码语言:javascript
复制
  PresentViewController(_menuController, true, null);

如果表示样式为Popover,则会出现此异常。

在表示发生之前,UIPopoverPresentationController应该有一个非零的sourceView或barButtonItem设置。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-20 02:02:41

每个UIViewController都有一个名为PopoverPresentationControllerUIPopoverPresentationController,您可以使用它来显示您的pop视图:

代码语言:javascript
复制
private void OnMenuSelected(object sender, EventArgs eventArgs)
{
    var popupView = new UIImageView(new CGRect(0, 0, 200, 200))
    {
        Image = UIImage.FromBundle("Menu"),
        UserInteractionEnabled = true
    };

    _menuController = new UIViewController
    {
        ModalPresentationStyle = UIModalPresentationStyle.Popover,
        PreferredContentSize = new CGSize(200, 200),
        View = popupView
    };

    _menuController.PopoverPresentationController.SourceRect = new CGRect(50, 50, 300, 300);
    _menuController.PopoverPresentationController.SourceView = View;


    PresentViewController(_menuController, true, null);
}

我发现,当我们不接受popoverview时,它将返回为null。因此,在这里,我建议您每次出现时都在方法中初始化它。

此外,如果您想在iPhone上实现相同的效果,请添加UIPopoverPresentationControllerDelegate如下:

代码语言:javascript
复制
public override UIModalPresentationStyle GetAdaptivePresentationStyle(UIPresentationController forPresentationController)
{
    return UIModalPresentationStyle.None;
}

将委托设置为:_menuController.PopoverPresentationController.Delegate = new MyPopOverViewDelegate();

票数 1
EN

Stack Overflow用户

发布于 2018-04-19 22:13:51

您需要将UIPopoverPresentationController.SourceView设置为视图控制器之外的UIView,以提供成为锚点的视图,即视图控制器上的UIView。

如果你说通过按一下按钮来呈现这一点,你可以用这个按钮作为源(如果那个位置合适的话)。

代码语言:javascript
复制
_presentationController = new UIPopoverPresentationController(_menuController, this)
{
    SourceView = button,
    SourceRect = new CGRect(50, 50, 300, 300),
};

示例:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49930691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档