IOS:创建全屏';覆盖层';UIView(单触式)

IOS:创建全屏';覆盖层';UIView(单触式),ios,xamarin.ios,Ios,Xamarin.ios,我在navigationcontroller中有一个视图,并希望创建一个“完整(应用程序)屏幕”覆盖,其中说明了一些关于用户应该做什么的内容。我已经在其他应用程序上看到了这一点,并且运行良好。我正在尝试下面的方法,但内容最终位于我的navcontroller标题下。调查讨论将矩形转换为“窗口级别”位置等,但它仍然位于下方 除了我在下面的微弱尝试,还有其他选择吗?或者链接到一个样本也很好 谢谢 HelpOverlayUIView _overlayView; public void Pre

我在navigationcontroller中有一个视图,并希望创建一个“完整(应用程序)屏幕”覆盖,其中说明了一些关于用户应该做什么的内容。我已经在其他应用程序上看到了这一点,并且运行良好。我正在尝试下面的方法,但内容最终位于我的navcontroller标题下。调查讨论将矩形转换为“窗口级别”位置等,但它仍然位于下方

除了我在下面的微弱尝试,还有其他选择吗?或者链接到一个样本也很好

谢谢

HelpOverlayUIView _overlayView;

    public void PresentHelpOverlay()
    {
        RectangleF windowFullFrame = new RectangleF(0,0,UIScreen.MainScreen.Bounds.Width,UIScreen.MainScreen.Bounds.Height);

        // Conversion?
        //[aView convertPoint:localPosition toView:nil];
        RectangleF overlayFrame = View.ConvertRectFromView(windowFullFrame ,null);

        // Clear old one if it exists.
        if (_overlayView != null) _overlayView = null;

        // Instantiate popup view and add to (in this case the 2nd tier view).  This is in an abstract class, if in a concrete one it'd normally just be View.Add
        _overlayView = new HelpOverlayUIView(this, overlayFrame);

        // tried th, didn't change it.
        // this.WantsFullScreenLayout = true;
        // _childView.BringSubviewToFront(_overlayView);
        _overlayView.Alpha = 0;

        _childView.Add (_overlayView);

        // Setup event to close without doing anything.
        _overlayView.CloseView += (sender, e) => {

            Console.WriteLine ("close called");
            // animate modal popup's departure
            UIView.Animate (
                0.5f,
                () => {
                // Anim Code
                _overlayView.Alpha = 0;
            },
            null
            );

        };

        // animate modal popup's arrival
        UIView.Animate (
            0.5f,
            () => {
            // Anim Code
            _overlayView.Alpha = 1;
        },
        null
        );

    }

(该视图只是一个UIView,带有Draw()方法的重载,该方法将文本等放置到视图中)

您可以将_overlayView添加到视图层次结构中更高的位置,例如NavigationViewController。如果您的NavigationViewController被设置为您的RootViewController(不管实际是什么),那么您可以尝试这样做

((AppDelegate)UIApplication.SharedApplication.Delegate).Window.RootViewController.Add(_overlayView);
您也可以像这样将子视图带到前面,但这只是该视图的前面,而不是所有视图的前面(这不是您真正想要的,除非_childView是您的NavigationViewController)


您可以将_overlayView添加到视图层次结构中更高的位置,例如NavigationViewController。如果您的NavigationViewController被设置为您的RootViewController(不管实际是什么),那么您可以尝试这样做

((AppDelegate)UIApplication.SharedApplication.Delegate).Window.RootViewController.Add(_overlayView);
您也可以像这样将子视图带到前面,但这只是该视图的前面,而不是所有视图的前面(这不是您真正想要的,除非_childView是您的NavigationViewController)


几个月后,我只想补充一点。确保上面的“窗口”带有小写字母“w”。确实有一个大写字母W的窗口,但在我的例子中,它抛出了一个例外。几个月后,我只想补充一点。确保上面的“窗口”带有小写字母“w”。确实有一个大写字母W的窗口,但在我的例子中,它抛出了一个例外。