Xamarin.forms 获取依赖项服务中的导航栏高度-Xamarin表单
我有一个问题,我需要在依赖项服务中获取导航栏的高度 目前,我一直在想接下来要做什么。我尝试了在stackoverflow和google中找到的所有东西,但没有人为我工作 这是我的密码:Xamarin.forms 获取依赖项服务中的导航栏高度-Xamarin表单,xamarin.forms,xamarin.ios,Xamarin.forms,Xamarin.ios,我有一个问题,我需要在依赖项服务中获取导航栏的高度 目前,我一直在想接下来要做什么。我尝试了在stackoverflow和google中找到的所有东西,但没有人为我工作 这是我的密码: [assembly: Dependency(typeof(DeviceInfo))] namespace Wicket.App.Mobile.iOS.Framework { public class DeviceInfo : IDeviceInfo { public float S
[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;
}
}
}
我已经完成了安卓部分,效果很好。现在唯一的问题是iOS。我已经尝试在AppDelegate中获取navigationcontroller的实例,这样我就可以像这样获取条形图框架
NavigationBar.Bounds.Height代码>我认为这应该有效:
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;
}
解决方案:
如何在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);
}
公共主页()
{
DependencyService.Get().getNaviHeight(此);
}
这对我很有效:
var navigationBar = UIApplication.SharedApplication.KeyWindow.RootViewController.View.Subviews[0].Subviews.OfType<UINavigationBar>().FirstOrDefault();
if(navigationBar != null)
{
// continue here...
}
var navigationBar=UIApplication.SharedApplication.KeyWindow.RootViewController.View.Subviews[0]。Subviews.OfType().FirstOrDefault();
如果(导航栏!=null)
{
//继续这里。。。
}
我已经试过了,但它会使我的应用程序崩溃,或者结果为空。在NavigationController部分,它的结果总是为空。不是我在我的页面构造器上使用依赖关系导航是如何开始的?它是从主控详细信息页面开始的您的MD页面是否初始化为MainPage=NavigationPage(MD)?或者,MD页面中的详细信息页面作为导航页面推送?您获得viewController了吗?你能提供一个简单的演示或者更多的代码来展示你的项目结构吗?我有一个ViewController,但是NavigationController总是空的。那么,你得到的ViewController和你想要的控制器一样吗?你的代码中的viewController真的有NavigationController
吗?我不确定我得到的viewController是我想要的。我得到的页面有带有菜单图标/汉堡图标的导航栏。因此,我确信应该有一个导航控制器。您可以检查viewcontroller
是否正确。我认为如果它是正确的,并且在您得到它之后,您应该得到它的navigationController
。