获取导航栏高度依存服务 - Xamarin形式

问题描述 投票:0回答:3

我有这个问题,其中我需要得到导航栏高度依赖我的服务。

目前,我坚持什么在这里跟随。我什么都试过我找到计算器和谷歌,但没有人对我的作品。

继承人我的代码:

[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中。我试图让navigationcontroller的实例中的AppDelegate,这样我就可以得到杆架这样NavigationBar.Bounds.Height;

xamarin.forms xamarin.ios
3个回答
0
投票

我想,这应该工作:

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;
    }

0
投票

解:

如何在IDeviceInfo里面的函数传递的viewController的实例作为参数?

尝试这个:

 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;

    }

并使用依赖性:

public MainPage ()
{
        DependencyService.Get<IDeviceInfo>().getNaviHeight(this);
}

0
投票

这个工作对我说:

var navigationBar = UIApplication.SharedApplication.KeyWindow.RootViewController.View.Subviews[0].Subviews.OfType<UINavigationBar>().FirstOrDefault();

if(navigationBar != null)
{
      // continue here...
}
© www.soinside.com 2019 - 2024. All rights reserved.