【问题标题】:Hide iOS navigation bar in Xamarin but retain ability to swipe back在 Xamarin 中隐藏 iOS 导航栏,但保留向后滑动的功能
【发布时间】:2017-09-11 04:35:10
【问题描述】:

我正在尝试对 Xamarin 隐藏 iOS 上的导航栏,但我想保留滑回最后一页的能力。

我试过这样做:

        this.ViewController.NavigationController.NavigationBar.Hidden = true;

还有这个:

        this.ViewController.NavigationController.NavigationBarHidden = true;

在自定义 PageRenderer 中,但它们都没有隐藏导航栏。如果我在推送页面时移除导航栏,我也会失去向后滑动的能力。

有什么建议吗?

【问题讨论】:

    标签: xamarin xamarin.ios xamarin.forms


    【解决方案1】:

    试试这个:

    public class PageCustomRenderer : PageRenderer, IUIGestureRecognizerDelegate
    {
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);
    
            if (NavigationController != null)
            {
                NavigationController.NavigationBarHidden = true;
                NavigationController.InteractivePopGestureRecognizer.Delegate  = this;
                NavigationController.InteractivePopGestureRecognizer.Enabled = true;
            }
        }
    }
    

    iOS 中 PageRender 中的this 已经是 ViewController,因此您可以从那里访问 NavigationController

    您需要让您的 PageRenderer 实现 IUIGestureRecognizerDelegate,以便您可以使其成为 NavigationControllerInteractivePopGestureRecognizer 的委托

    希望这会有所帮助。-

    【讨论】:

    • 我需要从接口实现任何功能吗?因为如果我只是扩展接口并将this 分配给InteractivePopGestureRecognizer.Delegate 它不允许我向后滑动。 NavigationBarHidden 属性也没有隐藏导航栏。
    • 不,没有必要,因为所有成员都标记为IsRequired = false,这意味着它们的实现是可选的。
    • 我已经更新了我的问题以显示我的渲染器当前的样子
    • 我想您在 Xamarin 项目中使用了 NavigationPage。此外,这将使您的所有页面都隐藏 NavigationBar,创建自定义 Page 然后仅为这些页面导出渲染器可能是一个更好的主意。
    • 好吧,这是有道理的。我也将内部页面包装在 NavigationPage 中,但我现在意识到我只需要将主页包装在 NavigationPage 中,这样您的解决方案就可以工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多