You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Xamarin iOS(iPhone)中创建Popover弹出视图?

当然可以在Xamarin iOS中创建Popover!你遇到的全屏问题大概率是没配置好Popover的展示参数,或者没处理iPhone上的自适应逻辑——毕竟在iPhone上默认Popover会被系统转成全屏模态,下面给你一步步的解决方案:

1. 先准备Popover的内容控制器

首先创建一个用来承载Popover内容的UIViewController,记得给它设置PreferredContentSize,这是控制Popover尺寸的关键:

public class PopoverContentVC : UIViewController
{
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();
        View.BackgroundColor = UIColor.White;
        // 自定义Popover的宽高,根据你的内容调整
        PreferredContentSize = new CGSize(280, 350);
        
        // 这里可以添加你的Popover内部控件,比如标签、按钮等
        var label = new UILabel(new CGRect(20, 20, 240, 30)) { Text = "这是Popover内容" };
        View.AddSubview(label);
    }
}
2. 处理按钮点击,触发Popover展示

在你的主页面控制器里,给触发按钮绑定点击事件,然后配置Popover的展示参数:

private void ShowPopoverBtn_TouchUpInside(object sender, EventArgs e)
{
    var popoverContent = new PopoverContentVC();
    // 必须设置模态展示样式为Popover
    popoverContent.ModalPresentationStyle = UIModalPresentationStyle.Popover;
    
    var popoverPresenter = popoverContent.PopoverPresentationController;
    if (popoverPresenter != null)
    {
        // 设置Popover的锚点:绑定到触发按钮
        popoverPresenter.SourceView = sender as UIButton;
        popoverPresenter.SourceRect = (sender as UIButton).Bounds;
        // 设置箭头允许的方向,比如向下
        popoverPresenter.PermittedArrowDirections = UIPopoverArrowDirection.Down;
        // 设置背景遮罩,点击遮罩可以关闭Popover
        popoverPresenter.BackgroundColor = UIColor.FromWhiteAlpha(0, 0.3f);
        // 绑定代理,处理自适应逻辑
        popoverPresenter.Delegate = this;
    }
    
    // 弹出Popover
    PresentViewController(popoverContent, true, null);
}
3. 实现代理,阻止自适应为全屏(最关键的一步!)

在iPhone设备上,系统默认会把Popover自适应成全屏模态,所以必须实现IUIPopoverPresentationControllerDelegate的方法来强制保持Popover样式:

// 让你的主控制器继承这个代理
public class MainPageVC : UIViewController, IUIPopoverPresentationControllerDelegate
{
    // 其他页面逻辑代码...

    // 重写这个方法,返回None来禁用自适应全屏
    [Export("adaptivePresentationStyleForPresentationController:")]
    public UIModalPresentationStyle AdaptivePresentationStyle(UIPresentationController forPresentationController)
    {
        return UIModalPresentationStyle.None;
    }
}
额外小提示
  • 如果需要在Popover关闭时执行逻辑,可以实现代理的DidDismissPopover方法
  • 可以根据不同设备调整PreferredContentSize,比如在iPad上设置更大的尺寸
  • 确保你的触发按钮已经正确关联到点击事件,没有空引用问题

内容的提问来源于stack exchange,提问作者BBB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:23:21