我很难在UIPopoverPresentationController上展示一个波波夫,我可以在网上找到什么,包括这和这。什么都帮不上忙。下面是我创建的一个测试应用程序:
ViewController.cs
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),
};
}我在按下按钮时说:
PresentViewController(_menuController, true, null);如果表示样式为Popover,则会出现此异常。
在表示发生之前,UIPopoverPresentationController应该有一个非零的sourceView或barButtonItem设置。
发布于 2018-04-20 02:02:41
每个UIViewController都有一个名为PopoverPresentationController的UIPopoverPresentationController,您可以使用它来显示您的pop视图:
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如下:
public override UIModalPresentationStyle GetAdaptivePresentationStyle(UIPresentationController forPresentationController)
{
return UIModalPresentationStyle.None;
}将委托设置为:_menuController.PopoverPresentationController.Delegate = new MyPopOverViewDelegate();
发布于 2018-04-19 22:13:51
您需要将UIPopoverPresentationController.SourceView设置为视图控制器之外的UIView,以提供成为锚点的视图,即父视图控制器上的UIView。
如果你说通过按一下按钮来呈现这一点,你可以用这个按钮作为源(如果那个位置合适的话)。
_presentationController = new UIPopoverPresentationController(_menuController, this)
{
SourceView = button,
SourceRect = new CGRect(50, 50, 300, 300),
};示例:

https://stackoverflow.com/questions/49930691
复制相似问题