首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在依赖项服务中获取导航栏高度- Xamarin窗体

在依赖项服务中获取导航栏高度- Xamarin窗体
EN

Stack Overflow用户
提问于 2018-11-16 23:02:25
回答 3查看 822关注 0票数 0

我有这个问题,我需要在我的依赖服务中获取导航栏的高度。

目前,我被困在这里要遵循什么。我尝试了我在stackoverflow和google中找到的所有东西,但没有人为我工作。

下面是我的代码:

代码语言:javascript
复制
[assembly: Dependency(typeof(DeviceInfo))]
namespace Wicket.App.Mobile.iOS.Framework
{
    public class DeviceInfo : IDeviceInfo
    {
        public float StatusBarHeight => (float)UIApplication.SharedApplication.StatusBarFrame.Size.Height;

        public float NavigationBarHeight => GetNavigationBarHeight();

        public static UINavigationController NavigationController { get; set; }

        public float GetNavigationBarHeight()
        {
            //Get navigation bar height


            return 0;
        }
    }
}

我已经完成了android部分,它工作得很好。现在唯一的问题是iOS。我已经尝试过在AppDelegate中获取navigationcontroller的实例,这样就可以像下面这样的NavigationBar.Bounds.Height;获得条形图了

EN

回答 3

Stack Overflow用户

发布于 2018-11-16 23:28:16

我认为这应该行得通:

代码语言:javascript
复制
var navheight = GetTopViewController().NavigationController.NavigationBar.Frame.Height;


public static UIViewController GetTopViewController()
    {
        var window = UIApplication.SharedApplication.KeyWindow;
        var vc = window.RootViewController;
        while (vc.PresentedViewController != null)
            vc = vc.PresentedViewController;

        if (vc is UINavigationController navController)
            vc = navController.ViewControllers.Last();

        return vc;
    }
票数 1
EN

Stack Overflow用户

发布于 2018-11-20 14:19:10

解决方案:

如何在IDeviceInfo内的函数中传递一个viewController实例作为参数

试试这个:

代码语言:javascript
复制
 public void getNaviHeight(ContentPage vc)
    {
        var renderer = Platform.GetRenderer(vc);
        if (renderer == null)
        {
            renderer = RendererFactory.GetRenderer(vc);
            Platform.SetRenderer(vc, renderer);
        }
        var viewController = renderer.ViewController;

        var h = viewController.NavigationController?.NavigationBar.Frame.Height;

    }

并使用依赖关系:

代码语言:javascript
复制
public MainPage ()
{
        DependencyService.Get<IDeviceInfo>().getNaviHeight(this);
}
票数 0
EN

Stack Overflow用户

发布于 2019-02-05 21:15:22

这对我很有效:

代码语言:javascript
复制
var navigationBar = UIApplication.SharedApplication.KeyWindow.RootViewController.View.Subviews[0].Subviews.OfType<UINavigationBar>().FirstOrDefault();

if(navigationBar != null)
{
      // continue here...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53340354

复制
相关文章

相似问题

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